- 4
- 0
привет! я собрал мод, и загрузил с ним майнкрафт, но он ничего не делает. Я не могу найти причину проблемы
ChatHudMixin:
package org.ho4u.mlml.mixin;
import net.minecraft.client.gui.hud.ChatHud;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Mixin(ChatHud.class)
public abstract class ChatHudMixin {
@Shadow
public abstract void addMessage(Text message);
@Unique
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
@Unique
private static final Set<String> HIGHLIGHT_WORDS = Set.of("важное", "тест", "алмаз");
@Unique
private static final Pattern[] CHAT_PATTERNS = {
Pattern.compile("Донат-чат » (.+?): (.+)"),
Pattern.compile("\\[G] (.+?) » (.+)"),
Pattern.compile(" \\[G](?: ⚑)? (.+?): (.+)"),
Pattern.compile(" \\[T](?: ⚑)? (.+?): (.+)"),
Pattern.compile("Креатив-чат » (.+?): (.+)"),
Pattern.compile("✉ » (.+?) -> тебе \\| (.+)"),
Pattern.compile(" (.+?) » (.+)")
};
@Inject(method = "addMessage(Lnet/minecraft/text/Text;)V", at = @At("HEAD"), cancellable = true)
private void injectFeatures(Text message, CallbackInfo ci) {
Text newMessage = formatMessage(message);
addMessage(newMessage);
ci.cancel();
}
@Unique
private Text formatMessage(Text message) {
String time = LocalDateTime.now().format(FORMATTER);
String username = extractUsername(message);
MutableText formattedMessage = Text.literal("[" + time + "] ").append(highlightWords(message));
if (!username.isEmpty()) {
formattedMessage.append(Text.literal(" ").append(createPunishButton(username)));
}
return formattedMessage;
}
@Unique
private Text highlightWords(Text message) {
String content = message.getString();
MutableText newMessage = Text.literal("");
for (String word : content.split(" ")) {
if (HIGHLIGHT_WORDS.contains(word.toLowerCase())) {
newMessage.append(Text.literal(word).styled(style -> style.withColor(Formatting.RED)));
} else {
newMessage.append(Text.literal(word));
}
newMessage.append(Text.literal(" "));
}
return newMessage;
}
@Unique
private Text createPunishButton(String username) {
return Text.literal("[Наказать]")
.styled(style -> style
.withColor(Formatting.RED)
.withBold(true)
.withUnderline(true)
.withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/punish " + username)));
}
@Unique
private String extractUsername(Text message) {
String content = message.getString();
for (Pattern pattern : CHAT_PATTERNS) {
Matcher matcher = pattern.matcher(content);
if (matcher.matches()) {
return matcher.group(1);
}
}
return "";
}
}