diff --git a/src/main/java/com/extendedae_plus/config/ModConfigs.java b/src/main/java/com/extendedae_plus/config/ModConfigs.java index 8689d7e..b1689b1 100644 --- a/src/main/java/com/extendedae_plus/config/ModConfigs.java +++ b/src/main/java/com/extendedae_plus/config/ModConfigs.java @@ -7,6 +7,7 @@ public final class ModConfigs { public static final ForgeConfigSpec.IntValue PAGE_MULTIPLIER; public static final ForgeConfigSpec.DoubleValue WIRELESS_MAX_RANGE; public static final ForgeConfigSpec.BooleanValue WIRELESS_CROSS_DIM_ENABLE; + public static final ForgeConfigSpec.BooleanValue SHOW_ENCOD_PATTERN_PLAYER; public static final ForgeConfigSpec.BooleanValue PROVIDER_ROUND_ROBIN_ENABLE; static { @@ -34,6 +35,13 @@ public final class ModConfigs { "开启后,从端可连接到不同维度的主端(忽略距离限制)") .define("wirelessCrossDimEnable", true); + SHOW_ENCOD_PATTERN_PLAYER = builder + .comment( + "是否显示样板编码玩家", + "开启后将在样板 HoverText 上添加样板的编码玩家" + ) + .define("showEncoderPatternPlayer", true); + // 智能倍增后,是否在样板供应器间轮询分配请求量(开启:按 provider 均分;关闭:不拆分) PROVIDER_ROUND_ROBIN_ENABLE = builder .comment( diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java index 056f2b9..fa6c760 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/ContainerPatternEncodingTermMenuMixin.java @@ -9,6 +9,7 @@ import com.glodblock.github.glodium.network.packet.sync.IActionHolder; import com.glodblock.github.glodium.network.packet.sync.Paras; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -16,6 +17,7 @@ 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Map; import java.util.function.Consumer; @@ -110,4 +112,12 @@ public abstract class ContainerPatternEncodingTermMenuMixin implements IActionHo } catch (Throwable ignored) { } } + + // 服务器端:在构造样板返回前插入编码玩家的名称 + @Inject(method = "encodePattern", at = @At("TAIL"), remap = false, cancellable = true) + private void eap$writeEncodePlayerToPattern(CallbackInfoReturnable cir) { + ItemStack itemStack = cir.getReturnValue(); + itemStack.getOrCreateTag().putString("encodePlayer", this.epp$player.getGameProfile().getName()); + cir.setReturnValue(itemStack); + } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/EncodedPatternItemMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/EncodedPatternItemMixin.java new file mode 100644 index 0000000..122d074 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/ae2/EncodedPatternItemMixin.java @@ -0,0 +1,29 @@ +package com.extendedae_plus.mixin.ae2; + +import appeng.crafting.pattern.EncodedPatternItem; +import com.extendedae_plus.config.ModConfigs; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.List; + +@Mixin(EncodedPatternItem.class) +public class EncodedPatternItemMixin { + // 客户端:在 HoverText 显示样板的编码玩家 + @Inject(method = "appendHoverText", at = @At("TAIL")) + public void epp$appendHoverText(ItemStack stack, Level level, List lines, TooltipFlag advancedTooltips, CallbackInfo ci){ + if (stack.hasTag() && ModConfigs.SHOW_ENCOD_PATTERN_PLAYER.get()) { + CompoundTag tag = stack.getOrCreateTag(); + String name = tag.getString("encodePlayer"); + lines.add(Component.translatable("extendedae_plus.pattern.hovertext.player", name).withStyle(ChatFormatting.GRAY)); + } + } +} diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index 8d1a562..30bc69e 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -15,6 +15,7 @@ "extendedae_plus.screen.add_mapping": "增加映射", "extendedae_plus.screen.cn_name": "中文名", "extendedae_plus.button.choose_provider":"上传样板", + "extendedae_plus.pattern.hovertext.player": "由 %s 编码", "block.extendedae_plus.4x_crafting_accelerator": "4x并行处理单元", "block.extendedae_plus.16x_crafting_accelerator": "16x并行处理单元", diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index c2149b2..cf41575 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -8,6 +8,7 @@ "accessor.AbstractContainerScreenAccessor", "accessor.ScreenAccessor", "ae2.AEBaseScreenMixin", + "ae2.EncodedPatternItemMixin", "ae2.PatternEncodingTermScreenMixin", "ae2.PatternProviderScreenMixin", "ae2.QuartzCuttingKnifeItemMixin",