From 99a492f4c05b20cb424540298f7b9bbf295c4f0e Mon Sep 17 00:00:00 2001 From: C-H716 <1536152356@qq.com> Date: Fri, 21 Nov 2025 17:29:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E7=B3=BB=E5=88=97=E5=8A=9F=E8=83=BD=E6=94=AF=E6=8C=81=E5=86=85?= =?UTF-8?q?=E5=AD=98=E5=8D=A1=E5=A4=8D=E5=88=B6=20=20Closes=20#28=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89Component=20?= =?UTF-8?q?=E8=A1=A5=E5=85=A8jade=20config=E7=BF=BB=E8=AF=91=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/extendedae_plus/ExtendedAEPlus.java | 2 ++ .../api/ids/EAPComponents.java | 36 +++++++++++++++++++ .../PatternProviderLogicAdvancedMixin.java | 25 ++++++++++--- .../PatternProviderLogicDoublingMixin.java | 15 ++++++++ .../assets/extendedae_plus/lang/en_us.json | 2 ++ .../assets/extendedae_plus/lang/zh_cn.json | 2 ++ 6 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/extendedae_plus/api/ids/EAPComponents.java diff --git a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java index 4253b20..be31b74 100644 --- a/src/main/java/com/extendedae_plus/ExtendedAEPlus.java +++ b/src/main/java/com/extendedae_plus/ExtendedAEPlus.java @@ -7,6 +7,7 @@ import appeng.block.AEBaseEntityBlock; import appeng.blockentity.crafting.CraftingBlockEntity; import appeng.items.parts.PartModelsHelper; import com.extendedae_plus.ae.api.storage.InfinityBigIntegerCellHandler; +import com.extendedae_plus.api.ids.EAPComponents; import com.extendedae_plus.config.ModConfigs; import com.extendedae_plus.init.*; import com.extendedae_plus.util.storage.InfinityStorageManager; @@ -55,6 +56,7 @@ public class ExtendedAEPlus { // Register the Deferred Register to the mod event bus so menu types get registered ModMenuTypes.MENUS.register(modEventBus); + EAPComponents.DR.register(modEventBus); // Register ourselves for server and other game events we are interested in. // Note that this is necessary if and only if we want *this* class (ExtendedAEPlus) to respond directly to events. // Do not add this line if there are no @SubscribeEvent-annotated functions in this class, like onServerStarting() below. diff --git a/src/main/java/com/extendedae_plus/api/ids/EAPComponents.java b/src/main/java/com/extendedae_plus/api/ids/EAPComponents.java new file mode 100644 index 0000000..f58c797 --- /dev/null +++ b/src/main/java/com/extendedae_plus/api/ids/EAPComponents.java @@ -0,0 +1,36 @@ +package com.extendedae_plus.api.ids; + +import com.extendedae_plus.ExtendedAEPlus; +import com.mojang.serialization.Codec; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.codec.ByteBufCodecs; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.UnaryOperator; + +public final class EAPComponents { + + public static final DeferredRegister> DR = + DeferredRegister.create(Registries.DATA_COMPONENT_TYPE, ExtendedAEPlus.MODID); + + // 2. 你的自定义组件(下面举几个常见例子) + + // 布尔值:高级阻塞模式 + public static final DeferredHolder, DataComponentType> ADVANCED_BLOCKING = + register("advanced_blocking", builder -> + builder.persistent(Codec.BOOL) // 存档持久化 + .networkSynchronized(ByteBufCodecs.BOOL)); // 网络同步(客户端要看到) + + public static final DeferredHolder, DataComponentType> SMART_DOUBLING = + register("smart_doubling", builder -> + builder.persistent(Codec.BOOL) // 存档持久化 + .networkSynchronized(ByteBufCodecs.BOOL)); // 网络同步(客户端要看到) + + private static DeferredHolder, DataComponentType> register( + String name, + UnaryOperator> builderOperator) { + return DR.register(name, () -> builderOperator.apply(DataComponentType.builder()).build()); + } +} \ No newline at end of file diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java index cb00349..be70960 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicAdvancedMixin.java @@ -7,7 +7,11 @@ import appeng.api.stacks.GenericStack; import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderTarget; import com.extendedae_plus.api.AdvancedBlockingHolder; +import com.extendedae_plus.api.ids.EAPComponents; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -37,12 +41,12 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder } @Inject(method = "writeToNBT", at = @At("TAIL")) - private void eap$writeAdvancedToNbt(CompoundTag tag, net.minecraft.core.HolderLookup.Provider registries, CallbackInfo ci) { + private void eap$writeAdvancedToNbt(CompoundTag tag, HolderLookup.Provider registries, CallbackInfo ci) { tag.putBoolean(EAP_ADV_BLOCKING_KEY, this.eap$advancedBlocking); } @Inject(method = "readFromNBT", at = @At("TAIL")) - private void eap$readAdvancedFromNbt(CompoundTag tag, net.minecraft.core.HolderLookup.Provider registries, CallbackInfo ci) { + private void eap$readAdvancedFromNbt(CompoundTag tag, HolderLookup.Provider registries, CallbackInfo ci) { if (tag.contains(EAP_ADV_BLOCKING_KEY)) { this.eap$advancedBlocking = tag.getBoolean(EAP_ADV_BLOCKING_KEY); } @@ -55,7 +59,7 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder IPatternDetails patternDetails, appeng.api.stacks.KeyCounter[] inputHolder) { // 原版是否打开阻挡 - boolean vanillaBlocking = ((PatternProviderLogic)(Object)this).isBlocking(); + boolean vanillaBlocking = ((PatternProviderLogic) (Object) this).isBlocking(); if (!vanillaBlocking) { return adapter.containsPatternInput(patternInputs); } @@ -89,5 +93,18 @@ public class PatternProviderLogicAdvancedMixin implements AdvancedBlockingHolder return true; // 每个输入槽都至少匹配了一个候选输入 } - @Shadow public void saveChanges() {} + @Shadow + public void saveChanges() {} + + @Inject(method = "exportSettings", at = @At("TAIL")) + private void onExportSettings(DataComponentMap.Builder builder, CallbackInfo ci) { + builder.set(EAPComponents.ADVANCED_BLOCKING, this.eap$advancedBlocking); + } + + @Inject(method = "importSettings", at = @At("TAIL")) + private void onImportSettings(DataComponentMap input, Player player, CallbackInfo ci) { + this.eap$advancedBlocking = Boolean.TRUE.equals(input.get(EAPComponents.ADVANCED_BLOCKING.get())); + // 持久化到 world + this.saveChanges(); + } } diff --git a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java index 60b65ec..6633bcb 100644 --- a/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java +++ b/src/main/java/com/extendedae_plus/mixin/ae2/helpers/PatternProviderLogicDoublingMixin.java @@ -5,8 +5,11 @@ import appeng.crafting.pattern.AEProcessingPattern; import appeng.helpers.patternprovider.PatternProviderLogic; import com.extendedae_plus.api.SmartDoublingAwarePattern; import com.extendedae_plus.api.SmartDoublingHolder; +import com.extendedae_plus.api.ids.EAPComponents; import com.extendedae_plus.mixin.ae2.accessor.PatternProviderLogicPatternsAccessor; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -72,4 +75,16 @@ public class PatternProviderLogicDoublingMixin implements SmartDoublingHolder { @Shadow public void saveChanges() {} + + @Inject(method = "exportSettings", at = @At("TAIL")) + private void onExportSettings(DataComponentMap.Builder builder, CallbackInfo ci) { + builder.set(EAPComponents.SMART_DOUBLING, this.eap$smartDoubling); + } + + @Inject(method = "importSettings", at = @At("TAIL")) + private void onImportSettings(DataComponentMap input, Player player, CallbackInfo ci) { + this.eap$smartDoubling = Boolean.TRUE.equals(input.get(EAPComponents.SMART_DOUBLING.get())); + // 持久化到 world + this.saveChanges(); + } } diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index d063ec9..650007b 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -76,6 +76,8 @@ "config.jade.plugin_extendedae_plus.wt_master_location": "Show Master Node Location", "config.jade.plugin_extendedae_plus.wt_locked": "Show Lock Status", "config.jade.plugin_extendedae_plus.wt_network_usable": "Show Network Online Status", + "config.jade.plugin_extendedae_plus.wt_channels": "Show Channel Usage", + "config.jade.plugin_extendedae_plus.wt_owner": "Show Owner Information", "extendedae_plus.tooltip.frequency": "Frequency: %d", "extendedae_plus.tooltip.master_mode": "Mode: %s", "extendedae_plus.tooltip.locked": "Lock Status: %s", 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 2dce88d..568ac44 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -76,6 +76,8 @@ "config.jade.plugin_extendedae_plus.wt_master_location": "显示主节点位置", "config.jade.plugin_extendedae_plus.wt_locked": "显示锁定状态", "config.jade.plugin_extendedae_plus.wt_network_usable": "显示网络在线状态", + "config.jade.plugin_extendedae_plus.wt_channels": "显示频道使用情况", + "config.jade.plugin_extendedae_plus.wt_owner": "显示所有者信息", "extendedae_plus.tooltip.frequency": "频率: %d", "extendedae_plus.tooltip.master_mode": "模式: %s", "extendedae_plus.tooltip.locked": "锁定状态: %s",