From 1dc801575adea6b6ecd28e9118db5b47f9ef9d70 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 10 Feb 2020 13:46:39 +0100 Subject: [PATCH] GH Releases, formatter work, removed old code TBMCPlugins/ChromaCore#76 --- .idea/ButtonChat.iml | 2 +- .travis.yml | 15 +- .../formatter/formatting/ChatFormatter.java | 225 +++--------------- .../formatter/formatting/FormatSettings.java | 15 +- .../formatting/FormattedSection.java | 5 +- .../formatter/formatting/MatchProvider.java | 2 + .../formatting/MatchProviderBase.java | 26 ++ .../formatting/RangeMatchProvider.java | 23 +- .../formatting/RegexMatchProvider.java | 13 +- .../formatting/StringMatchProvider.java | 15 +- 10 files changed, 122 insertions(+), 219 deletions(-) create mode 100644 src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProviderBase.java diff --git a/.idea/ButtonChat.iml b/.idea/ButtonChat.iml index c640e48..215cb7a 100644 --- a/.idea/ButtonChat.iml +++ b/.idea/ButtonChat.iml @@ -19,7 +19,7 @@ - + diff --git a/.travis.yml b/.travis.yml index 1d962ae..f241e78 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,15 +13,10 @@ jdk: sudo: true dist: trusty # Needed for Java 8, although we might not need Java 8 deploy: - # deploy develop to the staging environment - - provider: script - script: chmod +x deploy.sh && sh deploy.sh staging + - provider: releases + api_key: + secure: "F5YiEuD6LyRENUDMCslcSl0O0dg4IDk+nNeb4X2VLYlmb8dW9beMuIgjH8efTMeaQ3D/ntIkN0Dtf2GKvpOduhwkSbAgw4WM028X60SY9f2hmpEO3LmM4T1tKoDlI1T3BmhYP4KeTKBYn+etV1mSPbT07vUybCm/vGzvr96yMZGNFEoKsWLaEu7dZfBFULj4tXOwrLh/KO6BsdAHvZcGKWNVupPq3YoUVT0dpGcUudf5cpn+aaqMwyd709zgMbyCuqf+c5Udps43q4EKvr9z7TWxFUkGTPVVAcUVygJsi2ytuyA8TLMPq/KhYe9htnkNUnizbqv/j49xww0gVaD7OJXENJ4hAUTV4sdn1DXG45JXW+dir3V7YzbRYn3M+eCuKB2O77SXRZBkxcGtTMtCmghP9/tcRAQlXDXnxu7oAnlUVp17g/+aFApvlzZEZVx2N+fkyEe7JrUFlRCixtHyrmTLWhyV0Px9p0FHJpvSSCL0S0UKVAT/sNHYHhD5gouK7owEomEbG58XCsRDH6Et7RuDksB98ekK8brZp6S7dNIS2CVuVx1vIkXC8PzUGcpJQoztvEYUE20Axahh5s8AkE9n/O9jzs9ajcfYaHhWzYeUZzHdHllOYF9l6VoCUitTk4Sl8eJifSq3GzI+T6wGMBepZHLpe230MvBIrqGZ+Vg=" + file: 'Chroma-Core/target/Chroma-Core.jar' on: - branch: dev - skip_cleanup: true - # deploy master to production - - provider: script - script: chmod +x deploy.sh && sh deploy.sh production - on: - branch: master + tags: true skip_cleanup: true diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/ChatFormatter.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/ChatFormatter.java index b9f6e4a..104cb23 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/ChatFormatter.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/ChatFormatter.java @@ -1,8 +1,6 @@ package buttondevteam.chat.components.formatter.formatting; import buttondevteam.chat.commands.ucmds.admin.DebugCommand; -import buttondevteam.chat.components.formatter.ChatProcessing; -import buttondevteam.lib.architecture.ConfigData; import buttondevteam.lib.architecture.IHaveConfig; import buttondevteam.lib.chat.Color; import lombok.Builder; @@ -11,7 +9,6 @@ import lombok.val; import java.util.*; import java.util.function.Predicate; -import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -21,35 +18,10 @@ import java.util.stream.Collectors; * * @author NorbiPeti */ -@SuppressWarnings("UnusedAssignment") @Data @Builder public final class ChatFormatter { - Pattern regex; - @Builder.Default - short removeCharCount = 0; - @Builder.Default - Type type = Type.Normal; - String hoverText; - String name; - - @Override - public String toString() { - return "ChatFormatter{" + - "name='" + name + '\'' + - '}'; - } - - public static ChatFormatterBuilder builder(String name, Pattern regex) { - return builder().regex(regex).name(name); - } - - private static ChatFormatterBuilder builder() { - return new ChatFormatterBuilder(); - } - - private ConfigData enabled(IHaveConfig config) { - return config.getData(name + ".enabled", true); + private ChatFormatter() { } @FunctionalInterface @@ -57,7 +29,7 @@ public final class ChatFormatter { R apply(T1 x1, T2 x2, T3 x3); } - public static void Combine(List formatters, String str, TellrawPart tp, IHaveConfig config) { + public static void Combine(List formatters, String str, TellrawPart tp, IHaveConfig config) { /* * This method assumes that there is always a global formatter */ @@ -66,22 +38,14 @@ public final class ChatFormatter { if (config != null) //null if testing formatters.removeIf(cf -> !cf.enabled(config).get()); //Remove disabled formatters - createSections(formatters, str, sections, true); - - header("Section creation (excluders done)"); - createSections(formatters, str, sections, false); - sortSections(sections); - + var excluded = new ArrayList(); /* * 0: Start - 1: End index */ val remchars = new ArrayList(); - header("Range section creation"); - sections = createRangeSections(str, sections, formatters, remchars); - - header("Adding remove chars (RC)"); // Important to add after the range section conversion - addRemChars(sections, remchars, str); + createSections(formatters, str, sections, excluded, remchars); + sortSections(sections); header("Section combining"); combineSections(str, sections); @@ -91,123 +55,16 @@ public final class ChatFormatter { header("ChatFormatter.Combine done"); } - private static void createSections(List formatters, String str, ArrayList sections, - boolean excluders) { - } - - private static void newCombine(String str, ArrayList sections, ArrayList remchars) { - var stack = new Stack(); - for (int i = 0; i < str.length(); i++) { - for (Iterator iterator = sections.iterator(); iterator.hasNext(); ) { - FormattedSection section = iterator.next(); - if (section.Start <= i) { - stack.push(section); - iterator.remove(); - } - } + private static void createSections(List formatters, String str, ArrayList sections, + ArrayList excludedAreas, ArrayList removedCharacters) { + sections.add(new FormattedSection(FormatSettings.builder().color(Color.White).build(), 0, str.length() - 1, Collections.emptyList())); + for (var formatter : formatters) { + var sect = formatter.getNextSection(str, excludedAreas, removedCharacters); + if (sect != null) + sections.add(sect); } } - private static ArrayList createRangeSections(String str, List formatters, ArrayList remchars) { - ArrayList combined = new ArrayList<>(); - Map nextSection = new HashMap<>(); - boolean escaped = false; - int takenStart = -1, takenEnd = -1; - ChatFormatter takenFormatter = null; - boolean takenByBigGuy = false; //Can't win against him (finished sections take precedence) - for (final FormattedSection section : sections) { - // Set ending to -1 until closed with another 1 long "section" - only do this if IsRange is true - if (section.type != Type.Range) { - escaped = section.Formatters.contains(ChatProcessing.ESCAPE_FORMATTER) && !escaped; // Enable escaping on first \, disable on second - if (escaped) {// Don't add the escape character - remchars.add(new int[]{section.Start, section.Start}); - DebugCommand.SendDebugMessage("Found escaper section: " + section); - } else { - combined.add(section); // The above will delete the \ - DebugCommand.SendDebugMessage("Added section: " + section); - } - ChatFormatUtils.sendMessageWithPointer(str, section.Start, section.End); - continue; - } - if (!escaped) { - ChatFormatter formatter = section.Formatters.get(0); - if (section.Start == takenStart || (section.Start > takenStart && section.Start < takenEnd)) { - /* - * if (nextSection.containsKey(section.Formatters.get(0)) ? section.RemCharFromStart <= takenEnd - takenStart : section.RemCharFromStart > takenEnd - takenStart) { - */ - if (takenByBigGuy || formatter.removeCharCount < takenEnd - takenStart) { - DebugCommand.SendDebugMessage("Lose: " + section); - ChatFormatUtils.sendMessageWithPointer(str, section.Start, section.End); - DebugCommand.SendDebugMessage("And win: " + takenFormatter); - continue; // The current section loses - } - nextSection.remove(takenFormatter); // The current section wins - DebugCommand.SendDebugMessage("Win: " + section); - ChatFormatUtils.sendMessageWithPointer(str, section.Start, section.End); - DebugCommand.SendDebugMessage("And lose: " + takenFormatter); - } - boolean hasFormatter = nextSection.containsKey(formatter); - /*if (!hasFormatter) { - val ff = formatter; - val cfo = nextSection.keySet().stream().filter(f -> f.removeCharCount > ff.removeCharCount).findAny(); - if (cfo.isPresent()) { - //formatter = cfo.get(); - val s = nextSection.get(cfo.get()); - int takenS = section.Start, takenE = section.Start + formatter.removeCharCount; - if (s.Start == takenS || (s.Start > takenS && s.Start < takenE)) { //Peek() - hasFormatter = true; - continue; //Not the formatter we're looking for - TODO: It doesn't fix the problem of italics at the end - } - } - }*/ - takenStart = section.Start; - takenEnd = section.Start + formatter.removeCharCount; - takenFormatter = formatter; - if (hasFormatter) { - FormattedSection s = nextSection.remove(formatter); - //HACK? If we can find another section that removes more characters, finish that instead - // section: the ending marker section - s: the to-be full section - s.End = takenEnd - 1; //Take the remCharCount into account as well - // s.IsRange = false; // IsRange means it's a 1 long section indicating a start or an end - combined.add(s); - takenByBigGuy = true; - DebugCommand.SendDebugMessage("Finished section: " + s); - ChatFormatUtils.sendMessageWithPointer(str, s.Start, s.End); - } else { - DebugCommand.SendDebugMessage("Adding next section: " + section); - ChatFormatUtils.sendMessageWithPointer(str, section.Start, section.End); - nextSection.put(formatter, section); - takenByBigGuy = false; - } - DebugCommand - .SendDebugMessage("New area taken: (" + takenStart + "-" + takenEnd + ") " + takenFormatter); - ChatFormatUtils.sendMessageWithPointer(str, takenStart, takenEnd); - } else { - DebugCommand.SendDebugMessage("Skipping section: " + section); // This will keep the text (character) - ChatFormatUtils.sendMessageWithPointer(str, section.Start, section.End); - escaped = false; // Reset escaping if applied, like if we're at the '*' in '\*' - } - } - //Do not finish unfinished sections, ignore them - sections = combined; - return sections; - } - - private static void addRemChars(ArrayList sections, ArrayList remchars, String str) { - sections.stream() - .flatMap(fs -> fs.Formatters.stream().filter(cf -> cf.removeCharCount > 0) - .mapToInt(cf -> cf.removeCharCount).mapToObj(rcc -> new int[]{fs.Start, fs.Start + rcc - 1})) - .forEach(remchars::add); - sections.stream() - .flatMap(fs -> fs.Formatters.stream().filter(cf -> cf.removeCharCount > 0) - .mapToInt(cf -> cf.removeCharCount).mapToObj(rcc -> new int[]{fs.End - rcc + 1, fs.End})) - .forEach(remchars::add); - DebugCommand.SendDebugMessage("Added remchars:"); - DebugCommand.SendDebugMessage(remchars.stream().map(Arrays::toString).collect(Collectors.joining("; "))); - ChatFormatUtils.sendMessageWithPointer(str, - remchars.stream().flatMapToInt(Arrays::stream).toArray()); - } - private static void combineSections(String str, ArrayList sections) { for (int i = 1; i < sections.size(); i++) { DebugCommand.SendDebugMessage("i: " + i); @@ -229,9 +86,8 @@ public final class ChatFormatter { DebugCommand.SendDebugMessage(" and " + lastSection); ChatFormatUtils.sendMessageWithPointer(str, lastSection.Start, lastSection.End); if (firstSection.Start == lastSection.Start && firstSection.End == lastSection.End) { - firstSection.Formatters.addAll(lastSection.Formatters); + firstSection.Settings.copyFrom(lastSection.Settings); firstSection.Matches.addAll(lastSection.Matches); - firstSection.type = lastSection.type; DebugCommand.SendDebugMessage("To section " + firstSection); ChatFormatUtils.sendMessageWithPointer(str, firstSection.Start, firstSection.End); sections.remove(i); @@ -242,14 +98,13 @@ public final class ChatFormatter { int origend2 = firstSection.End; firstSection.End = lastSection.Start - 1; int origend = lastSection.End; - FormattedSection section = new FormattedSection(firstSection.Formatters, lastSection.Start, origend, - firstSection.Matches, Type.Normal); - section.Formatters.addAll(lastSection.Formatters); + FormattedSection section = new FormattedSection(firstSection.Settings, lastSection.Start, origend, + firstSection.Matches); + section.Settings.copyFrom(lastSection.Settings); section.Matches.addAll(lastSection.Matches); // TODO: Clean sections.add(i, section); // Use the properties of the first section not the second one - lastSection.Formatters.clear(); - lastSection.Formatters.addAll(firstSection.Formatters); + lastSection.Settings = firstSection.Settings; lastSection.Matches.clear(); lastSection.Matches.addAll(firstSection.Matches); @@ -331,29 +186,28 @@ public final class ChatFormatter { } DebugCommand.SendDebugMessage("Section text: " + originaltext); String openlink = null; - section.Formatters.sort(Comparator.comparing(cf2 -> cf2.priority.GetValue())); //Apply the highest last, to overwrite previous ones + //section.Formatters.sort(Comparator.comparing(cf2 -> cf2.priority.GetValue())); //Apply the highest last, to overwrite previous ones TellrawPart newtp = new TellrawPart(""); - for (ChatFormatter formatter : section.Formatters) { - DebugCommand.SendDebugMessage("Applying formatter: " + formatter); - if (formatter.onmatch != null) - originaltext = formatter.onmatch.apply(originaltext, formatter, section); - if (formatter.color != null) - newtp.setColor(formatter.color); - if (formatter.bold) - newtp.setBold(true); - if (formatter.italic) - newtp.setItalic(true); - if (formatter.underlined) - newtp.setUnderlined(true); - if (formatter.strikethrough) - newtp.setStrikethrough(true); - if (formatter.obfuscated) - newtp.setObfuscated(true); - if (formatter.openlink != null) - openlink = formatter.openlink; - if (formatter.hoverText != null) - newtp.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, formatter.hoverText)); - } + var settings = section.Settings; + DebugCommand.SendDebugMessage("Applying settings: " + settings); + if (settings.onmatch != null) + originaltext = settings.onmatch.apply(originaltext, settings, section); + if (settings.color != null) + newtp.setColor(settings.color); + if (settings.bold) + newtp.setBold(true); + if (settings.italic) + newtp.setItalic(true); + if (settings.underlined) + newtp.setUnderlined(true); + if (settings.strikethrough) + newtp.setStrikethrough(true); + if (settings.obfuscated) + newtp.setObfuscated(true); + if (settings.openlink != null) + openlink = settings.openlink; + if (settings.hoverText != null) + newtp.setHoverEvent(TellrawEvent.create(TellrawEvent.HoverAction.SHOW_TEXT, settings.hoverText)); if (lasttp != null && newtp.getColor() == lasttp.getColor() && newtp.isBold() == lasttp.isBold() && newtp.isItalic() == lasttp.isItalic() @@ -381,8 +235,7 @@ public final class ChatFormatter { private static void sortSections(ArrayList sections) { sections.sort( (s1, s2) -> s1.Start == s2.Start - ? s1.End == s2.End ? Integer.compare(s2.Formatters.get(0).priority.GetValue(), - s1.Formatters.get(0).priority.GetValue()) : Integer.compare(s1.End, s2.End) + ? s1.End == s2.End ? 0 : Integer.compare(s1.End, s2.End) //TODO: Test : Integer.compare(s1.Start, s2.Start)); } diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/FormatSettings.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/FormatSettings.java index 39dce46..12d1ee9 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/FormatSettings.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/FormatSettings.java @@ -13,6 +13,19 @@ public class FormatSettings { boolean strikethrough; boolean obfuscated; Color color; - ChatFormatter.TriFunc onmatch; + ChatFormatter.TriFunc onmatch; String openlink; + String hoverText; + + public void copyFrom(FormatSettings settings) { + try { + for (var field : FormatSettings.class.getDeclaredFields()) + if (field.getType() == boolean.class && field.getBoolean(settings)) + field.setBoolean(this, true); //Set to true if either of them are true + else if (field.get(this) == null) + field.set(this, field.get(settings)); + } catch (Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/FormattedSection.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/FormattedSection.java index 0345479..324c8e1 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/FormattedSection.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/FormattedSection.java @@ -1,14 +1,15 @@ package buttondevteam.chat.components.formatter.formatting; import java.util.ArrayList; +import java.util.List; public class FormattedSection { public int Start; public int End; public FormatSettings Settings; - public ArrayList Matches = new ArrayList(); + public List Matches = new ArrayList(); - FormattedSection(FormatSettings settings, int start, int end, ArrayList matches) { + FormattedSection(FormatSettings settings, int start, int end, List matches) { Start = start; End = end; Settings = settings; diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProvider.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProvider.java index db6a388..f232dd8 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProvider.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProvider.java @@ -8,4 +8,6 @@ public interface MatchProvider { FormattedSection getNextSection(String message, ArrayList ignoredAreas, ArrayList removedCharacters); boolean isFinished(); + + String getName(); } diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProviderBase.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProviderBase.java new file mode 100644 index 0000000..ccefcb5 --- /dev/null +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/MatchProviderBase.java @@ -0,0 +1,26 @@ +package buttondevteam.chat.components.formatter.formatting; + +import buttondevteam.lib.architecture.ConfigData; +import buttondevteam.lib.architecture.IHaveConfig; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import javax.annotation.Nullable; +import java.util.ArrayList; + +@RequiredArgsConstructor +public abstract class MatchProviderBase implements MatchProvider { + @Getter + protected boolean finished; + @Getter + private final String name; + + @Nullable + @Override + public abstract FormattedSection getNextSection(String message, ArrayList ignoredAreas, ArrayList removedCharacters); + + ConfigData enabled(IHaveConfig config) { + return config.getData(name + ".enabled", true); + } + +} diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/RangeMatchProvider.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/RangeMatchProvider.java index eefe32b..909f7c3 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/RangeMatchProvider.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/RangeMatchProvider.java @@ -1,19 +1,22 @@ package buttondevteam.chat.components.formatter.formatting; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import buttondevteam.chat.commands.ucmds.admin.DebugCommand; import java.util.ArrayList; +import java.util.Collections; -@RequiredArgsConstructor -public class RangeMatchProvider implements MatchProvider { +public class RangeMatchProvider extends MatchProviderBase { private final String pattern; private final FormatSettings settings; - @Getter - private boolean finished; private int nextIndex = 0; private FormattedSection startedSection; + public RangeMatchProvider(String name, String pattern, FormatSettings settings) { + super(name); + this.pattern = pattern; + this.settings = settings; + } + @SuppressWarnings("DuplicatedCode") @Override public FormattedSection getNextSection(String message, ArrayList ignoredAreas, ArrayList removedCharacters) { @@ -29,9 +32,15 @@ public class RangeMatchProvider implements MatchProvider { } removedCharacters.add(new int[]{i, i + len - 1}); if (startedSection == null) { - startedSection = new FormattedSection(settings, i, i + len - 1, new ArrayList<>(0)); + DebugCommand.SendDebugMessage("Started range match from " + i + " to " + (i + len - 1)); + DebugCommand.SendDebugMessage("With settings: " + settings); + ChatFormatUtils.sendMessageWithPointer(message, i, i + len - 1); + startedSection = new FormattedSection(settings, i, i + len - 1, Collections.emptyList()); return null; } else { + DebugCommand.SendDebugMessage("Finished range match from " + i + " to " + (i + len - 1)); + DebugCommand.SendDebugMessage("With settings: " + settings); + ChatFormatUtils.sendMessageWithPointer(message, i, i + len - 1); startedSection.End = i + len - 1; return startedSection; } diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/RegexMatchProvider.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/RegexMatchProvider.java index af2fc72..213592f 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/RegexMatchProvider.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/RegexMatchProvider.java @@ -1,21 +1,22 @@ package buttondevteam.chat.components.formatter.formatting; import buttondevteam.chat.commands.ucmds.admin.DebugCommand; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; -@RequiredArgsConstructor -public class RegexMatchProvider implements MatchProvider { +public class RegexMatchProvider extends MatchProviderBase { private final Pattern pattern; private final FormatSettings settings; private Matcher matcher; - @Getter - private boolean finished; + + public RegexMatchProvider(String name, Pattern pattern, FormatSettings settings) { + super(name); + this.pattern = pattern; + this.settings = settings; + } @Nullable @Override diff --git a/src/main/java/buttondevteam/chat/components/formatter/formatting/StringMatchProvider.java b/src/main/java/buttondevteam/chat/components/formatter/formatting/StringMatchProvider.java index bcab617..dc197de 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/formatting/StringMatchProvider.java +++ b/src/main/java/buttondevteam/chat/components/formatter/formatting/StringMatchProvider.java @@ -1,15 +1,14 @@ package buttondevteam.chat.components.formatter.formatting; -import lombok.Getter; +import buttondevteam.chat.commands.ucmds.admin.DebugCommand; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Collections; -public class StringMatchProvider implements MatchProvider { +public class StringMatchProvider extends MatchProviderBase { private final String[] strings; private final FormatSettings settings; - @Getter - private boolean finished; private int nextIndex = 0; /** @@ -18,7 +17,8 @@ public class StringMatchProvider implements MatchProvider { * @param settings The format settings * @param strings The strings to match in the correct order */ - public StringMatchProvider(FormatSettings settings, String... strings) { + public StringMatchProvider(String name, FormatSettings settings, String... strings) { + super(name); this.settings = settings; this.strings = strings; } @@ -37,6 +37,9 @@ public class StringMatchProvider implements MatchProvider { return null; } nextIndex = i + len; - return new FormattedSection(settings, i, i + len - 1, new ArrayList<>(0)); + DebugCommand.SendDebugMessage("Found string match from " + i + " to " + (i + len - 1)); + DebugCommand.SendDebugMessage("With settings: " + settings); + ChatFormatUtils.sendMessageWithPointer(message, i, i + len - 1); + return new FormattedSection(settings, i, i + len - 1, Collections.emptyList()); } }