Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- import java.util.List;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import io.papermc.paper.event.player.AsyncChatEvent;
- import net.kyori.adventure.text.Component;
- import net.kyori.adventure.text.format.TextColor;
- import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
- public class EventListener implements Listener
- {
- @EventHandler
- public void onPlayerChat( AsyncChatEvent event ) {
- // Lấy tin nhắn của người chơi
- Component message = event.message();
- // Chuyển tin nhắn về đoạn ký tự
- String msg = PlainTextComponentSerializer.plainText().serialize(message);
- // Gửi tin nhắn đã qua chỉnh sửa lên khung chat
- event.message(hexConverter(msg));
- }
- // Khai báo cấu trúc của mã HEX
- final Pattern HEX_PATTERN = Pattern.compile("#[a-fA-F0-9]{6}");
- /*
- * Dò mã HEX
- * tách mã
- * xóa mã
- * tạo component
- * thêm màu
- * trả kết quả
- */
- private Component hexConverter( String a ) {
- // Nếu không tìm thấy đoạn mã HEX thì trả về.
- if ( !HEX_PATTERN.matcher(a).find() ) { return Component.text(a); }
- //Khai báo danh sách điểm bắt đầu của mã HEX
- List<Integer> ints = new ArrayList<>();
- Matcher matcher = HEX_PATTERN.matcher(a);
- // Tìm và thêm vào các điểm bắt đầu
- while ( matcher.find() ) { ints.add(matcher.start()); }
- // Khai báo danh sách chưa các đoạn ký tự được tách ra
- List<String> list = new ArrayList<>();
- for ( int i = 0 ; i < ints.size() ; i++ ) {
- // Lấy điểm bắt đầu và kết thúc
- int start = ints.get(i), end = a.length();
- /*
- * Nếu là điểm đầu tiên nhưng lớn hơn 0
- * thì thêm đoạn đằng trước vào danh sách
- * các đoạn ký tự
- *
- */
- if ( i == 0 & start > 0 )
- list.add(a.substring(0, start));
- /*
- * Nếu điểm tiếp theo không phải là điểm cuối
- * thì lấy điểm tiếp theo làm điểm cuối
- *
- */
- if ( i < ints.size() - 1 )
- end = ints.get(i + 1);
- // Thêm đoạn ký tự vào danh sách
- list.add(a.substring(start, end));
- }
- // Tạo biến cho builder (để gộp nhiều component lại)
- var builder = Component.text();
- // Đi qua các giá trị trong danh sách trên
- for ( String str : list ) {
- Matcher m = HEX_PATTERN.matcher(str);
- // Khai báo màu mặc định
- String color = "#FFFFFF";
- // Kiểm tra nếu đoạn ký tự có tồn tại mã HEX
- while ( m.find() ) {
- // Đặt màu thành mã HEX
- color = str.substring(m.start(), m.end());
- // Xóa mã HEX ra khỏi đoạn ký tự
- str = str.replace(color, "");
- }
- // Tạo component cho đoạn ký tự
- Component comp = Component.text(str);
- // Thêm màu vào component
- comp = comp.color(TextColor.fromHexString(color));
- builder.append(comp);
- }
- // Trả về
- return builder.build();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement