Skip to content
This repository has been archived by the owner on Jan 20, 2024. It is now read-only.

Commit

Permalink
Plugin: make support for async messages
Browse files Browse the repository at this point in the history
  • Loading branch information
TheFaser committed Dec 21, 2023
1 parent 3e8d613 commit 9acdfdc
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 34 deletions.
10 changes: 8 additions & 2 deletions src/main/java/net/flectone/chat/builder/MessageBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public class MessageBuilder {
private final FConfiguration config;

public MessageBuilder(@Nullable Player player, @Nullable ItemStack itemStack, @NotNull String message, @NotNull List<String> featuresList) {
this(player, itemStack, message, featuresList, false);
}

public MessageBuilder(@Nullable Player player, @Nullable ItemStack itemStack, @NotNull String message, @NotNull List<String> featuresList, boolean isAsync) {
this.itemStack = itemStack;
this.sender = player;

Expand Down Expand Up @@ -64,7 +68,7 @@ public MessageBuilder(@Nullable Player player, @Nullable ItemStack itemStack, @N
&& fModule.isEnabledFor(player) && !fModule.hasNoPermission(player)) {

boolean mentionEnabled = featuresList.contains("mention");
formattingModule.replace(sender, message, "", messages, itemStack, mentionEnabled, featuresList.contains("formatting"));
formattingModule.replace(sender, message, "", messages, itemStack, mentionEnabled, featuresList.contains("formatting"), isAsync);
} else {
WordParams wordParams = new WordParams();
wordParams.setText(message);
Expand Down Expand Up @@ -182,7 +186,9 @@ public BaseComponent[] buildMessage(@Nullable Player sender, @NotNull Player rec
if (fPlayer != null) {
wordComponent = new FPlayerComponent(fPlayer.getPlayer(), recipient, word);
}

} else if (wordParams.getImageComponent() != null) {
wordComponent = new FComponent(MessageUtil.formatAll(sender, recipient, wordParams.getText()));
wordComponent.setHoverEvent(wordParams.getImageComponent().getHoverEvent());
} else if (wordParams.isUrl()) {
wordComponent = new FURLComponent(sender, recipient, word, wordParams.getUrlText());
} else if (wordParams.isHide()) {
Expand Down
19 changes: 11 additions & 8 deletions src/main/java/net/flectone/chat/module/FCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,17 @@ public void sendGlobalMessage(@NotNull Collection<Player> recipients, @Nullable
sendToSpy(player, recipients, CommandSpy.Type.DEFAULT, message);
}

MessageBuilder messageBuilder = new MessageBuilder(player, itemStack, message, getFeatures());
recipients.parallelStream().forEach(recipient -> {
recipient.spigot().sendMessage(messageBuilder.buildFormat(player, recipient, format, isClickable));

FModule fModule = moduleManager.get(SoundsModule.class);
if (fModule instanceof SoundsModule soundsModule) {
soundsModule.play(new FSound(player, recipient, this.toString()));
}
@NotNull String finalMessage = message;
Bukkit.getScheduler().runTaskAsynchronously(FlectoneChat.getPlugin(), () -> {
MessageBuilder messageBuilder = new MessageBuilder(player, itemStack, finalMessage, getFeatures(), true);
recipients.parallelStream().forEach(recipient -> {
recipient.spigot().sendMessage(messageBuilder.buildFormat(player, recipient, format, isClickable));

FModule fModule = moduleManager.get(SoundsModule.class);
if (fModule instanceof SoundsModule soundsModule) {
soundsModule.play(new FSound(player, recipient, this.toString()));
}
});
});
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.flectone.chat.module.autoMessage;

import net.flectone.chat.FlectoneChat;
import net.flectone.chat.builder.MessageBuilder;
import net.flectone.chat.model.player.FPlayer;
import net.flectone.chat.model.player.Settings;
Expand All @@ -9,6 +10,7 @@
import net.flectone.chat.util.MessageUtil;
import net.flectone.chat.util.PlayerUtil;
import net.flectone.chat.util.RandomUtil;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -45,14 +47,17 @@ public void send(@NotNull Player player) {

List<String> features = config.getVaultStringList(player, this + ".features");
String message = incrementIndexAndGet(MESSAGE_MAP, MESSAGE_INDEX_MAP, player);
MessageBuilder messageBuilder = new MessageBuilder(player, null, message, features);

player.spigot().sendMessage(messageBuilder.buildMessage(null, player, ""));
Bukkit.getScheduler().runTaskAsynchronously(FlectoneChat.getPlugin(), () -> {
MessageBuilder messageBuilder = new MessageBuilder(player, null, message, features, true);

FModule fModule = moduleManager.get(SoundsModule.class);
if (fModule instanceof SoundsModule soundsModule) {
soundsModule.play(new FSound(player, player, this.toString()));
}
player.spigot().sendMessage(messageBuilder.buildMessage(null, player, ""));

FModule fModule = moduleManager.get(SoundsModule.class);
if (fModule instanceof SoundsModule soundsModule) {
soundsModule.play(new FSound(player, player, this.toString()));
}
});
}

@NotNull
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package net.flectone.chat.module.playerMessage.chat;

import net.flectone.chat.FlectoneChat;
import net.flectone.chat.builder.MessageBuilder;
import net.flectone.chat.module.FModule;
import net.flectone.chat.module.chatBubble.ChatBubbleModule;
import net.flectone.chat.module.integrations.IntegrationsModule;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

Expand All @@ -30,14 +32,17 @@ public void send(@NotNull Player sender, @NotNull List<Player> recipientsList,

message = IntegrationsModule.interactiveChatMark(message, sender.getUniqueId());

MessageBuilder messageBuilder = new MessageBuilder(sender, sender.getInventory().getItemInMainHand(), message, featuresList);
@NotNull String finalMessage = message;
Bukkit.getScheduler().runTaskAsynchronously(FlectoneChat.getPlugin(), () -> {
MessageBuilder messageBuilder = new MessageBuilder(sender, sender.getInventory().getItemInMainHand(), finalMessage, featuresList, true);

recipientsList.forEach(player ->
player.spigot().sendMessage(messageBuilder.buildFormat(sender, player, chatFormat, true)));
recipientsList.forEach(player ->
player.spigot().sendMessage(messageBuilder.buildFormat(sender, player, chatFormat, true)));

FModule fModule = moduleManager.get(ChatBubbleModule.class);
if (fModule instanceof ChatBubbleModule chatBubbleModule) {
chatBubbleModule.add(sender, messageBuilder.getMessage(""));
}
FModule fModule = moduleManager.get(ChatBubbleModule.class);
if (fModule instanceof ChatBubbleModule chatBubbleModule) {
chatBubbleModule.add(sender, messageBuilder.getMessage(""));
}
});
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package net.flectone.chat.module.playerMessage.formatting;

import net.flectone.chat.FlectoneChat;
import net.flectone.chat.component.FImageComponent;
import net.flectone.chat.model.message.TextParameters;
import net.flectone.chat.model.message.WordParams;
import net.flectone.chat.model.player.FPlayer;
Expand All @@ -12,6 +14,7 @@
import org.bukkit.Location;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeInstance;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -58,9 +61,14 @@ public HashMap<String, String> load(@Nullable Player player) {
return groupFormattingMap;
}

public void replace(@Nullable Player player, @NotNull String message, @NotNull String command,
@NotNull List<WordParams> messages, @Nullable ItemStack itemStack, boolean mentionEnabled,
boolean isEnabled) {
public void replace(@Nullable Player player,
@NotNull String message,
@NotNull String command,
@NotNull List<WordParams> messages,
@Nullable ItemStack itemStack,
boolean mentionEnabled,
boolean isEnabled,
boolean isAsync) {

HashMap<String, String> formattingMap = load(player);

Expand All @@ -72,12 +80,12 @@ public void replace(@Nullable Player player, @NotNull String message, @NotNull S

if (sortedPairs.isEmpty()) {
lastTextParamaters = new TextParameters(message);
splitStringToWordParams(player, command, lastTextParamaters, messages, itemStack, formattingMap, mentionEnabled, isEnabled);
splitStringToWordParams(player, command, lastTextParamaters, messages, itemStack, formattingMap, mentionEnabled, isEnabled, isAsync);

} else if (sortedPairs.get(0).getValue() != 0) {
String startText = message.substring(0, sortedPairs.get(0).getValue());
lastTextParamaters = new TextParameters(startText);
splitStringToWordParams(player, command, lastTextParamaters, messages, itemStack, formattingMap, mentionEnabled, isEnabled);
splitStringToWordParams(player, command, lastTextParamaters, messages, itemStack, formattingMap, mentionEnabled, isEnabled, isAsync);
}

for (int x = 0; x < sortedPairs.size() - 1; x++) {
Expand All @@ -98,7 +106,7 @@ public void replace(@Nullable Player player, @NotNull String message, @NotNull S

lastTextParamaters = textParameters;

splitStringToWordParams(player, command, textParameters, messages, itemStack, formattingMap, mentionEnabled, isEnabled);
splitStringToWordParams(player, command, textParameters, messages, itemStack, formattingMap, mentionEnabled, isEnabled, isAsync);
}

if (!sortedPairs.isEmpty()) {
Expand All @@ -108,7 +116,7 @@ public void replace(@Nullable Player player, @NotNull String message, @NotNull S
String endText = message.substring(pairA.getValue() + pairA.getKey().length());
TextParameters textParameters = new TextParameters(endText);

splitStringToWordParams(player, command, textParameters, messages, itemStack, formattingMap, mentionEnabled, isEnabled);
splitStringToWordParams(player, command, textParameters, messages, itemStack, formattingMap, mentionEnabled, isEnabled, isAsync);
}
}

Expand Down Expand Up @@ -152,10 +160,15 @@ private List<Pair<String, Integer>> getPairs(@NotNull String message, HashMap<St
return sortedPairs;
}

private void splitStringToWordParams(@Nullable Player sender, @NotNull String command,
@NotNull TextParameters textParameters, @NotNull List<WordParams> messages,
@Nullable ItemStack itemStack, @NotNull HashMap<String, String> formattingMap,
boolean mentionEnabled, boolean isEnabled) {
private void splitStringToWordParams(@Nullable Player sender,
@NotNull String command,
@NotNull TextParameters textParameters,
@NotNull List<WordParams> messages,
@Nullable ItemStack itemStack,
@NotNull HashMap<String, String> formattingMap,
boolean mentionEnabled,
boolean isEnabled,
boolean isAsync) {
String text = textParameters.getText();

if (text.equals(" ")) {
Expand Down

0 comments on commit 9acdfdc

Please sign in to comment.