Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
de24ca4437 | ||
|
|
e351e86bea | ||
|
|
4e92285261 | ||
|
|
a377bdfe48 |
@@ -8,9 +8,6 @@ dependencies {
|
|||||||
}
|
}
|
||||||
compileOnly("org.spongepowered:configurate-yaml:4.1.2") // Configurate
|
compileOnly("org.spongepowered:configurate-yaml:4.1.2") // Configurate
|
||||||
compileOnly("net.luckperms:api:5.3") // Luckperms
|
compileOnly("net.luckperms:api:5.3") // Luckperms
|
||||||
testImplementation("org.junit.jupiter:junit-jupiter-api:5.7.0")
|
|
||||||
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.7.0")
|
|
||||||
testImplementation("com.alttd:Galaxy-API:1.19.2-R0.1-SNAPSHOT")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
publishing {
|
publishing {
|
||||||
@@ -28,7 +25,3 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test {
|
|
||||||
useJUnitPlatform()
|
|
||||||
}
|
|
||||||
@@ -544,8 +544,11 @@ public final class Config {
|
|||||||
NICK_CURRENT = getString("nicknames.messages.nick-current", NICK_CURRENT);
|
NICK_CURRENT = getString("nicknames.messages.nick-current", NICK_CURRENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String APRIL_FOOLS_RESET = "esrever";
|
public static int DEATH_MESSAGES_MAX_PER_PERIOD = 5;
|
||||||
private static void aprilFools() {
|
public static int DEATH_MESSAGES_LIMIT_PERIOD_MINUTES = 15;
|
||||||
APRIL_FOOLS_RESET = getString("april-fools.reset", APRIL_FOOLS_RESET);
|
|
||||||
|
private static void deathMessagesSettings() {
|
||||||
|
DEATH_MESSAGES_MAX_PER_PERIOD = getInt("death-messages.max-per-period", DEATH_MESSAGES_MAX_PER_PERIOD);
|
||||||
|
DEATH_MESSAGES_LIMIT_PERIOD_MINUTES = getInt("death-messages.limit-period-minutes", DEATH_MESSAGES_LIMIT_PERIOD_MINUTES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
package com.alttd.chat.objects;
|
package com.alttd.chat.objects;
|
||||||
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.JoinConfiguration;
|
|
||||||
import net.kyori.adventure.text.TextComponent;
|
|
||||||
import net.kyori.adventure.text.TextReplacementConfig;
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
|
import org.intellij.lang.annotations.RegExp;
|
||||||
|
|
||||||
import java.util.Collections;
|
import javax.annotation.RegEx;
|
||||||
import java.util.List;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class ModifiableString {
|
public class ModifiableString {
|
||||||
private Component text;
|
private Component text;
|
||||||
@@ -32,37 +30,4 @@ public class ModifiableString {
|
|||||||
public Component component() {
|
public Component component() {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reverse() {
|
|
||||||
text = reverseComponent(text);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Component reverseComponent(Component component) {
|
|
||||||
if (!(component instanceof TextComponent textComponent)) {
|
|
||||||
return Component.text("")
|
|
||||||
.append(Component.join(JoinConfiguration.noSeparators(), reverseChildren(component.children())));
|
|
||||||
}
|
|
||||||
|
|
||||||
String content = textComponent.content();
|
|
||||||
String reversedContent = new StringBuilder(content).reverse().toString();
|
|
||||||
|
|
||||||
List<Component> reversedChildren = reverseChildren(component.children());
|
|
||||||
|
|
||||||
return Component.text("")
|
|
||||||
.append(Component.join(JoinConfiguration.noSeparators(), reversedChildren)
|
|
||||||
.append(Component.text(reversedContent, component.style())));
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Component> reverseChildren(List<Component> children) {
|
|
||||||
return children.stream()
|
|
||||||
.map(this::reverseComponent)
|
|
||||||
.collect(Collectors.collectingAndThen(Collectors.toList(), list -> {
|
|
||||||
Collections.reverse(list);
|
|
||||||
return list;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeStringAtStart(String s) {
|
|
||||||
text = text.replaceText(TextReplacementConfig.builder().match("^" + s).replacement("").build());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ public class ALogger {
|
|||||||
logger.warn(message);
|
logger.warn(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void warn(String message, Throwable throwable) {
|
||||||
|
logger.warn(message, throwable);
|
||||||
|
}
|
||||||
|
|
||||||
public static void info(String message) {
|
public static void info(String message) {
|
||||||
logger.info(message);
|
logger.info(message);
|
||||||
}
|
}
|
||||||
@@ -23,4 +27,8 @@ public class ALogger {
|
|||||||
public static void error(String message) {
|
public static void error(String message) {
|
||||||
logger.error(message);
|
logger.error(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void error(String message, Throwable throwable) {
|
||||||
|
logger.error(message, throwable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
import com.alttd.chat.config.Config;
|
|
||||||
import com.alttd.chat.objects.ModifiableString;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|
||||||
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
|
||||||
|
|
||||||
public class ReverseTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testReverseString() {
|
|
||||||
String input = "Hello how are you doing today?";
|
|
||||||
String expectedOutput = new StringBuilder(input).reverse().toString();
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
ModifiableString modifiableString = new ModifiableString(miniMessage.deserialize(input));
|
|
||||||
modifiableString.reverse();
|
|
||||||
assertEquals(expectedOutput, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRemoveKeyword() {
|
|
||||||
String input = "Hello how are you doing today?";
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
|
|
||||||
ModifiableString modifiableString = new ModifiableString(miniMessage.deserialize(Config.APRIL_FOOLS_RESET + " " + input));
|
|
||||||
modifiableString.removeStringAtStart(Config.APRIL_FOOLS_RESET + " ");
|
|
||||||
|
|
||||||
assertEquals(input, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testRemoveKeywordWithTags() {
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
String input = "<blue>" + Config.APRIL_FOOLS_RESET + " <red>Hello how are</red> you <blue>doing today</blue>?</blue>";
|
|
||||||
String expectedOutput = "Hello how are you doing today?";
|
|
||||||
Component deserialize = miniMessage.deserialize(input);
|
|
||||||
|
|
||||||
ModifiableString modifiableString = new ModifiableString(deserialize);
|
|
||||||
modifiableString.removeStringAtStart(Config.APRIL_FOOLS_RESET + " ");
|
|
||||||
|
|
||||||
assertEquals(expectedOutput, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testReverseStringWithTags() {
|
|
||||||
String input = "<red>Hello how are</red> you <blue>doing today</blue>?";
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
Component deserialize = miniMessage.deserialize(input);
|
|
||||||
ModifiableString modifiableString = new ModifiableString(deserialize);
|
|
||||||
String expectedOutput = new StringBuilder(PlainTextComponentSerializer.plainText().serialize(deserialize)).reverse().toString();
|
|
||||||
modifiableString.reverse();
|
|
||||||
assertEquals(expectedOutput, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void complexTestReverseStringWithTags() {
|
|
||||||
String input = "<green><red>Hello <b>how</b> are</red> you <blue>doing today</blue><gold>?</gold></green>";
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
Component deserialize = miniMessage.deserialize(input);
|
|
||||||
ModifiableString modifiableString = new ModifiableString(deserialize);
|
|
||||||
String expectedOutput = new StringBuilder(PlainTextComponentSerializer.plainText().serialize(deserialize)).reverse().toString();
|
|
||||||
modifiableString.reverse();
|
|
||||||
assertEquals(expectedOutput, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void extraComplexTestReverseStringWithTags() {
|
|
||||||
String input = "<gold>This <red>is</red> longer<green> <name> <red>Hello <b>how</b> are</red> you <test> <blue>doing <name> today</blue><gold>?</gold></green></gold>";
|
|
||||||
MiniMessage miniMessage = MiniMessage.miniMessage();
|
|
||||||
Component deserialize = miniMessage.deserialize(input, TagResolver.resolver(
|
|
||||||
Placeholder.component("name", miniMessage.deserialize("<red>Cool<blue><rainbow>_player_</rainbow>name</red>")),
|
|
||||||
Placeholder.parsed("test", "test replacement")
|
|
||||||
));
|
|
||||||
ModifiableString modifiableString = new ModifiableString(deserialize);
|
|
||||||
String expectedOutput = new StringBuilder(PlainTextComponentSerializer.plainText().serialize(deserialize)).reverse().toString();
|
|
||||||
modifiableString.reverse();
|
|
||||||
System.out.println(expectedOutput);
|
|
||||||
assertEquals(expectedOutput, modifiableString.string());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -29,7 +29,6 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.time.*;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -108,14 +107,7 @@ public class ChatListener implements Listener {
|
|||||||
|
|
||||||
Set<Player> playersToPing = new HashSet<>();
|
Set<Player> playersToPing = new HashSet<>();
|
||||||
pingPlayers(playersToPing, modifiableString, player);
|
pingPlayers(playersToPing, modifiableString, player);
|
||||||
LocalDate now = LocalDate.now();
|
|
||||||
if (now.getMonth().equals(Month.APRIL) && now.getDayOfMonth() == 1) {
|
|
||||||
if (modifiableString.string().startsWith(Config.APRIL_FOOLS_RESET + " ")) {
|
|
||||||
modifiableString.removeStringAtStart(Config.APRIL_FOOLS_RESET + " ");
|
|
||||||
} else {
|
|
||||||
modifiableString.reverse();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
input = render(player, modifiableString.component());
|
input = render(player, modifiableString.component());
|
||||||
for (Player receiver : receivers) {
|
for (Player receiver : receivers) {
|
||||||
receiver.sendMessage(input);
|
receiver.sendMessage(input);
|
||||||
|
|||||||
@@ -11,15 +11,25 @@ import com.alttd.chat.objects.Toggleable;
|
|||||||
import com.alttd.chat.util.GalaxyUtility;
|
import com.alttd.chat.util.GalaxyUtility;
|
||||||
import com.alttd.chat.util.Utility;
|
import com.alttd.chat.util.Utility;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.Style;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.block.SignChangeEvent;
|
import org.bukkit.event.block.SignChangeEvent;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Stack;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@@ -86,4 +96,29 @@ public class PlayerListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final HashMap<UUID, Stack<Instant>> sendPlayerDeaths = new HashMap<>();
|
||||||
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
|
public void onPlayerDeath(@NotNull PlayerDeathEvent event) {
|
||||||
|
UUID uuid = event.getPlayer().getUniqueId();
|
||||||
|
Stack<Instant> playerDeathsStack = sendPlayerDeaths.computeIfAbsent(uuid, key -> new Stack<>());
|
||||||
|
Instant cutOff = Instant.now().minus(Config.DEATH_MESSAGES_LIMIT_PERIOD_MINUTES, ChronoUnit.MINUTES);
|
||||||
|
|
||||||
|
while (playerDeathsStack.peek().isBefore(cutOff)) {
|
||||||
|
playerDeathsStack.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playerDeathsStack.size() > Config.DEATH_MESSAGES_MAX_PER_PERIOD || serverConfig.MUTED) {
|
||||||
|
event.deathMessage(Component.empty());
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
Component component = event.deathMessage();
|
||||||
|
if (component != null) {
|
||||||
|
component = Component.text("* ").append(component);
|
||||||
|
component = component.style(Style.style(TextColor.color(82, 80, 77), TextDecoration.ITALIC));
|
||||||
|
event.deathMessage(component);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playerDeathsStack.push(Instant.now());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user