修复切割刀复制方块名称带有特殊格式的前缀后缀

This commit is contained in:
C-H716 2025-08-22 13:52:33 +08:00
parent 3ef34c106d
commit c28664e84f

View File

@ -48,6 +48,27 @@ import static com.extendedae_plus.util.ExtendedAELogger.LOGGER;
*/ */
@Mixin(value = QuartzCuttingKnifeItem.class) @Mixin(value = QuartzCuttingKnifeItem.class)
public abstract class QuartzCuttingKnifeItemMixin { public abstract class QuartzCuttingKnifeItemMixin {
/**
* 清理方块名称移除分节符号和其他格式字符
*/
@Unique
private String eap$cleanBlockName(String name) {
if (name == null || name.isBlank()) {
return name;
}
// 移除 Minecraft 分节符号 (§) 及其后面的字符
name = name.replaceAll("§[0-9a-fk-or]", "");
// 移除多余的空白字符
name = name.trim();
// 移除常见的格式字符
name = name.replaceAll("[\\[\\](){}]", "");
return name;
}
@Inject(method = "use", at = @At("HEAD"), cancellable = true) @Inject(method = "use", at = @At("HEAD"), cancellable = true)
private void eap$copyNameOnShiftRightClick(Level level, Player player, InteractionHand hand, private void eap$copyNameOnShiftRightClick(Level level, Player player, InteractionHand hand,
CallbackInfoReturnable<InteractionResultHolder<ItemStack>> cir) { CallbackInfoReturnable<InteractionResultHolder<ItemStack>> cir) {
@ -70,6 +91,9 @@ public abstract class QuartzCuttingKnifeItemMixin {
// 获取方块名称 // 获取方块名称
String name = eap$getBlockName(level, pos, hr.getLocation()); String name = eap$getBlockName(level, pos, hr.getLocation());
// 清理名称移除分节符号等格式字符
name = eap$cleanBlockName(name);
// 复制到剪贴板并反馈 // 复制到剪贴板并反馈
boolean success = eap$tryCopyToClipboard(Minecraft.getInstance(), name); boolean success = eap$tryCopyToClipboard(Minecraft.getInstance(), name);
player.displayClientMessage(Component.literal(success player.displayClientMessage(Component.literal(success
@ -96,6 +120,9 @@ public abstract class QuartzCuttingKnifeItemMixin {
// 获取方块名称 // 获取方块名称
String name = eap$getBlockName(level, pos, context.getClickLocation()); String name = eap$getBlockName(level, pos, context.getClickLocation());
// 清理名称移除分节符号等格式字符
name = eap$cleanBlockName(name);
// 复制到剪贴板并反馈 // 复制到剪贴板并反馈
boolean success = eap$tryCopyToClipboard(Minecraft.getInstance(), name); boolean success = eap$tryCopyToClipboard(Minecraft.getInstance(), name);
player.displayClientMessage(Component.literal(success player.displayClientMessage(Component.literal(success