From 2d93c9d25675e5f7837e01d63aa256fbfc62f04f Mon Sep 17 00:00:00 2001 From: 1820982382 Date: Sat, 8 Aug 2026 13:00:16 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=87=8A=E6=94=BE]=E4=BF=AE=E6=AD=A3=E7=A0=94?= =?UTF-8?q?=E7=A9=B6=E8=8A=82=E7=82=B9=E6=9C=AA=E8=A7=A3=E9=94=81=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E5=B7=B2=E6=9C=89=E5=90=88?= =?UTF-8?q?=E6=88=90=E7=9A=84=E6=BC=8F=E6=B4=9E=EF=BC=9B=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=A6=81=E7=B4=A0=E4=B8=AD=E7=BB=A7=E6=8E=A5=E5=8F=A3=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=A0=8F=EF=BC=9B=E5=88=A0=E9=99=A4=E6=BA=90=E8=B4=A8?= =?UTF-8?q?=E5=8F=91=E4=BF=A1=E5=99=A8=E5=A4=9A=E4=BD=99=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 9 +- gradle.properties | 15 ++- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 5 +- settings.gradle | 7 +- .../client/ResearchGateOverlay.java | 94 ++++++++++++++++++ .../ContainerDistillationPatternEncoder.java | 20 ++++ .../ContainerKnowledgeInscriber.java | 18 +++- .../container/GuiEssentiaLevelEmitter.java | 4 - .../integration/tc/ArcaneCraftingPattern.java | 22 ++++ .../integration/tc/PatternResearchHelper.java | 49 +++++++++ .../network/ResearchGateErrorPacket.java | 41 ++++++++ .../common/network/ThENetworking.java | 7 ++ .../common/parts/VisInterfacePart.java | 22 +++- .../common/tiles/TileArcaneAssembler.java | 14 ++- .../mixins/ae2/MixinCraftConfirmScreen.java | 29 ++++++ .../mixins/ae2/MixinCraftingService.java | 73 ++++++++++++++ .../assets/thaumicenergistics/lang/en_us.json | 3 + .../assets/thaumicenergistics/lang/zh_cn.json | 3 + .../textures/model/golembackpack/clay.png | Bin 4252 -> 0 bytes .../textures/model/golembackpack/diamond.png | Bin 4208 -> 0 bytes .../textures/model/golembackpack/flesh.png | Bin 4410 -> 0 bytes .../textures/model/golembackpack/gold.png | Bin 4348 -> 0 bytes .../textures/model/golembackpack/iron.png | Bin 4234 -> 0 bytes .../textures/model/golembackpack/stone.png | Bin 4343 -> 0 bytes .../textures/model/golembackpack/straw.png | Bin 4405 -> 0 bytes .../textures/model/golembackpack/tallow.png | Bin 4242 -> 0 bytes .../textures/model/golembackpack/thaum.png | Bin 3836 -> 0 bytes .../textures/model/golembackpack/wood.png | Bin 4276 -> 0 bytes .../resources/thaumicenergistics.mixins.json | 2 + 30 files changed, 415 insertions(+), 22 deletions(-) create mode 100644 src/main/java/thaumicenergistics/client/ResearchGateOverlay.java create mode 100644 src/main/java/thaumicenergistics/common/integration/tc/PatternResearchHelper.java create mode 100644 src/main/java/thaumicenergistics/common/network/ResearchGateErrorPacket.java create mode 100644 src/main/java/thaumicenergistics/mixins/ae2/MixinCraftConfirmScreen.java create mode 100644 src/main/java/thaumicenergistics/mixins/ae2/MixinCraftingService.java delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/clay.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/diamond.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/flesh.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/gold.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/iron.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/stone.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/straw.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/tallow.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/thaum.png delete mode 100644 src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/wood.png diff --git a/.gitignore b/.gitignore index c9ef071..78bd68c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,15 +4,14 @@ run/ library/ .idea/ .vscode/ +.reasonix/ .superpowers/ .workbuddy/ +.trae/ .iml *.log task_plan.md findings.md progress.md -library/参考/ -library/log/ -library/*.md -library/*.txt -路径.md +/modules/thaumicenergistics-neo/存储体系方案.md +/modules/thaumicenergistics-neo/计划书-配方溯源.md diff --git a/gradle.properties b/gradle.properties index f5c9f37..72f65ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project -mod_version=2.1.0 +mod_version=2.0.1 mod_group=thaumicenergistics # Mod @@ -16,3 +16,16 @@ ae2_version=19.2.17 jei_version=19.39.0.368 thaumcraft_version=0.2.2.34-port.1 jade_version=15.9.1+neoforge +org.gradle.jvmargs=-Xmx2G +org.gradle.daemon=true +org.gradle.parallel=true +org.gradle.caching=true +org.gradle.configuration-cache=true +minecraft_version_range=[1.21.1,1.22) +neoforge_version_range=[21,) +loader_version_range=[4,) +systemProp.http.proxyHost=127.0.0.1 +systemProp.http.proxyPort=7890 +systemProp.https.proxyHost=127.0.0.1 +systemProp.https.proxyPort=7890 +systemProp.http.nonProxyHosts=localhost|127.* diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 12612 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 HJ4oML2Lo<@i8BwbL^1~GkG`E7C$SEa_ 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1cbf2a8..e18bc25 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,8 +1,7 @@ -distributionBase=GRADLE_USER_HOME +distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists - diff --git a/settings.gradle b/settings.gradle index 2e16831..e116946 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,9 +6,4 @@ pluginManagement { } } -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' -} - -include("thaumicenergistics") -project(":thaumicenergistics").projectDir = file("modules/thaumicenergistics-neo") +rootProject.name = "thaumicenergistics-neo" diff --git a/src/main/java/thaumicenergistics/client/ResearchGateOverlay.java b/src/main/java/thaumicenergistics/client/ResearchGateOverlay.java new file mode 100644 index 0000000..40e71af --- /dev/null +++ b/src/main/java/thaumicenergistics/client/ResearchGateOverlay.java @@ -0,0 +1,94 @@ +package thaumicenergistics.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.network.chat.Component; + +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ScreenEvent; + +import appeng.api.networking.crafting.ICraftingSubmitResult; +import appeng.client.gui.me.crafting.CraftConfirmScreen; +import appeng.client.gui.me.crafting.CraftErrorScreen; +import appeng.menu.me.crafting.CraftConfirmMenu; + +import thaumicenergistics.ThaumicEnergistics; + +/** + * 客户端:研究未解锁拦截的提示渲染。 + * + * 服务端拦截合成提交后,通过 ResearchGateErrorPacket 发送研究键; + * 本类在合成屏(确认屏/错误屏)之上绘制提示文字(最上层,不被 GUI 遮挡), + * 并暴露 hasResearchGateError() 供 MixinCraftConfirmScreen 判断是否拦截 CPU 忙错误屏。 + */ +@EventBusSubscriber(modid = ThaumicEnergistics.MODID, value = Dist.CLIENT) +public final class ResearchGateOverlay { + + private static String pendingResearch = null; + + private ResearchGateOverlay() {} + + /** 网络包处理:记录研究键(客户端线程)。 */ + public static void setPendingResearch(String research) { + pendingResearch = research; + } + + /** + * 当前菜单是否处于研究未解锁拦截状态。 + * 依据 CraftConfirmMenu.submitError 判断:错误结果存在且 errorCode 非空, + * 说明本次提交被拒绝(研究拦截触发 CPU_BUSY)。 + */ + public static boolean hasResearchGateError() { + return pendingResearch != null; + } + + /** 清空研究拦截状态(玩家离开合成屏或成功重试时由外部调用)。 */ + public static void clearPendingResearch() { + pendingResearch = null; + } + + @SubscribeEvent + public static void onScreenRenderPost(ScreenEvent.Render.Post event) { + // 玩家已离开合成屏(不是确认屏/错误屏)→ 清除拦截状态 + if (!(event.getScreen() instanceof CraftConfirmScreen) + && !(event.getScreen() instanceof CraftErrorScreen)) { + if (pendingResearch != null) { + clearPendingResearch(); + } + return; + } + // 无拦截状态不渲染 + if (pendingResearch == null) { + return; + } + + GuiGraphics gui = event.getGuiGraphics(); + Minecraft mc = Minecraft.getInstance(); + int width = mc.getWindow().getGuiScaledWidth(); + + // 纯色无样式,保证与 MC 默认 GUI 字体一致 + Component msg = Component.literal("当前研究节点未解锁:" + pendingResearch); + + int textWidth = mc.font.width(msg); + int x = (width - textWidth) / 2; + int y = 30; + + drawWithShadow(gui, mc, msg, x, y, 0xFF5555, 0x000000); + } + + /** 以指定颜色绘制文字并叠 8 向同偏移描边,保证在全屏 GUI 之上可读。 */ + private static void drawWithShadow(GuiGraphics gui, Minecraft mc, Component msg, int x, int y, + int textColor, int outlineColor) { + for (int dx = -1; dx <= 1; dx++) { + for (int dy = -1; dy <= 1; dy++) { + if (dx == 0 && dy == 0) { + continue; + } + gui.drawString(mc.font, msg, x + dx, y + dy, outlineColor); + } + } + gui.drawString(mc.font, msg, x, y, textColor); + } +} diff --git a/src/main/java/thaumicenergistics/common/container/ContainerDistillationPatternEncoder.java b/src/main/java/thaumicenergistics/common/container/ContainerDistillationPatternEncoder.java index d838089..d0c76ac 100644 --- a/src/main/java/thaumicenergistics/common/container/ContainerDistillationPatternEncoder.java +++ b/src/main/java/thaumicenergistics/common/container/ContainerDistillationPatternEncoder.java @@ -4,8 +4,10 @@ import appeng.api.crafting.PatternDetailsHelper; import appeng.api.stacks.AEItemKey; import appeng.api.stacks.GenericStack; import appeng.core.definitions.AEItems; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.RegistryFriendlyByteBuf; import net.neoforged.neoforge.network.PacketDistributor; +import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -13,11 +15,13 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import net.neoforged.neoforge.items.ItemStackHandler; import net.neoforged.neoforge.items.SlotItemHandler; import thaumcraft.api.ThaumcraftApiHelper; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.research.TCResearchManager; import thaumcraft.common.research.ThaumometerScanManager; import thaumicenergistics.ThaumicEnergistics; import thaumicenergistics.common.integration.appeng.AEssentiaKey; @@ -31,6 +35,10 @@ import java.util.List; public class ContainerDistillationPatternEncoder extends AbstractContainerMenu { + /** 蒸馏编码统一要求的研究节点(要素蒸馏)。 */ + private static final String RESEARCH_DISTILESSENTIA = "DISTILESSENTIA"; + private static final String NBTKEY_RESEARCH = "research"; + private static final int PLAYER_INV_Y = 150; private static final int HOTBAR_Y = 208; private static final int PLAYER_INV_X = 8; @@ -249,6 +257,13 @@ public class ContainerDistillationPatternEncoder extends AbstractContainerMenu { public void onEncodePattern() { if (encoder == null) return; + + // 研究限制:必须解锁"要素蒸馏"才能配置物品→源质蒸馏样板 + if (!TCResearchManager.has(playerInv.player, RESEARCH_DISTILESSENTIA)) { + ThaumicEnergistics.LOG.info("[DistillationEncoder] 玩家未解锁研究 {},拒绝编码蒸馏样板", RESEARCH_DISTILESSENTIA); + return; + } + Aspect selected = getSelectedAspect(); ItemStack source = getSourceItem(); ItemStack blankSlot = encoder.inventory.getStackInSlot(TileDistillationPatternEncoder.SLOT_BLANK_PATTERNS); @@ -288,6 +303,11 @@ public class ContainerDistillationPatternEncoder extends AbstractContainerMenu { List.of(output) ); + // 在样板上标记研究键(供使用端按玩家校验) + CompoundTag researchTag = new CompoundTag(); + researchTag.putString(NBTKEY_RESEARCH, RESEARCH_DISTILESSENTIA); + encoded.set(DataComponents.CUSTOM_DATA, CustomData.of(researchTag)); + encoder.inventory.setStackInSlot(TileDistillationPatternEncoder.SLOT_ENCODED_PATTERN, encoded); } diff --git a/src/main/java/thaumicenergistics/common/container/ContainerKnowledgeInscriber.java b/src/main/java/thaumicenergistics/common/container/ContainerKnowledgeInscriber.java index b5ebc13..eb19d33 100644 --- a/src/main/java/thaumicenergistics/common/container/ContainerKnowledgeInscriber.java +++ b/src/main/java/thaumicenergistics/common/container/ContainerKnowledgeInscriber.java @@ -23,6 +23,7 @@ import thaumcraft.api.aspects.AspectList; import thaumcraft.api.crafting.IArcaneRecipe; import thaumcraft.api.crafting.ShapedArcaneRecipe; import thaumcraft.api.crafting.ShapelessArcaneRecipe; +import thaumcraft.common.research.TCResearchManager; import thaumicenergistics.common.container.slot.GhostSlot; import thaumicenergistics.common.integration.tc.ArcaneCraftingPattern; import thaumicenergistics.common.inventory.HandlerKnowledgeCore; @@ -220,6 +221,13 @@ public class ContainerKnowledgeInscriber extends AbstractContainerMenu { return CoreSaveState.Disabled_InvalidRecipe; } + // 研究限制:配方有研究要求且玩家未解锁 → 禁止保存 + String research = activeRecipe.getResearch(); + if (research != null && !research.isEmpty() + && !TCResearchManager.has(playerInv.player, research)) { + return CoreSaveState.Disabled_InvalidRecipe; + } + boolean isNew = !kCoreHandler.hasPatternFor(result); if (isNew) { return kCoreHandler.hasRoomToStorePattern() @@ -364,6 +372,14 @@ public class ContainerKnowledgeInscriber extends AbstractContainerMenu { private void savePattern() { if (activeRecipe == null) return; + // 研究限制:配方有研究要求时,操作者必须已解锁对应研究才能编码 + String research = activeRecipe.getResearch(); + if (research != null && !research.isEmpty() + && !TCResearchManager.has(playerInv.player, research)) { + ThaumicEnergistics.LOG.info("[KnowledgeInscriber] 玩家未解锁研究 {},拒绝保存奥术样板", research); + return; + } + ItemStack[] inputs = new ItemStack[CRAFTING_GRID_SIZE]; for (int i = 0; i < CRAFTING_GRID_SIZE; i++) { ItemStack stack = craftingInventory.getStackInSlot(i); @@ -376,7 +392,7 @@ public class ContainerKnowledgeInscriber extends AbstractContainerMenu { } ItemStack result = resultInventory.getStackInSlot(0).copy(); - ArcaneCraftingPattern pattern = new ArcaneCraftingPattern(aspects, result, inputs); + ArcaneCraftingPattern pattern = new ArcaneCraftingPattern(aspects, result, inputs, research); kCoreHandler.addPattern(pattern); updatePatternSlots(); sendSaveState(); diff --git a/src/main/java/thaumicenergistics/common/container/GuiEssentiaLevelEmitter.java b/src/main/java/thaumicenergistics/common/container/GuiEssentiaLevelEmitter.java index ab0a069..189ff96 100644 --- a/src/main/java/thaumicenergistics/common/container/GuiEssentiaLevelEmitter.java +++ b/src/main/java/thaumicenergistics/common/container/GuiEssentiaLevelEmitter.java @@ -72,10 +72,6 @@ public class GuiEssentiaLevelEmitter extends UpgradeableScreen TYPE = + new Type<>(ThaumicEnergistics.id("research_gate_error")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buf, pkt) -> buf.writeUtf(pkt.research), + buf -> new ResearchGateErrorPacket(buf.readUtf()) + ); + + @Override + public Type type() { + return TYPE; + } + + /** + * 客户端处理:记录最近一次研究未解锁拦截的研究键,供渲染层读取。 + */ + public void handleOnClient(IPayloadContext ctx) { + ctx.enqueueWork(() -> { + // 无论当前在什么界面,记录研究键 + ResearchGateOverlay.setPendingResearch(this.research); + }); + } +} diff --git a/src/main/java/thaumicenergistics/common/network/ThENetworking.java b/src/main/java/thaumicenergistics/common/network/ThENetworking.java index 7f5ba75..346a1ea 100644 --- a/src/main/java/thaumicenergistics/common/network/ThENetworking.java +++ b/src/main/java/thaumicenergistics/common/network/ThENetworking.java @@ -49,5 +49,12 @@ public final class ThENetworking { CellWorkbenchSyncPacket.STREAM_CODEC, (pkt, ctx) -> pkt.handleOnClient(ctx) ); + + // ResearchGateErrorPacket — S2C(服务端→客户端,研究未解锁拦截提示,携带研究键) + registrar.playToClient( + ResearchGateErrorPacket.TYPE, + ResearchGateErrorPacket.STREAM_CODEC, + (pkt, ctx) -> pkt.handleOnClient(ctx) + ); } } diff --git a/src/main/java/thaumicenergistics/common/parts/VisInterfacePart.java b/src/main/java/thaumicenergistics/common/parts/VisInterfacePart.java index c7740c8..fb3b0e2 100644 --- a/src/main/java/thaumicenergistics/common/parts/VisInterfacePart.java +++ b/src/main/java/thaumicenergistics/common/parts/VisInterfacePart.java @@ -164,13 +164,14 @@ public class VisInterfacePart extends P2PTunnelPart implements /** * 找到面对中继的隧道端:优先 P2P 输入端,其次任一输出端,最后自身。 + * 注意:内部使用 super.getOutputs() 而非 getOutputs(),避免覆写导致递归。 */ private VisInterfacePart findRelayEnd() { VisInterfacePart input = getInput(); if (input != null && input.getRelay() != null) { return input; } - for (VisInterfacePart output : getOutputs()) { + for (VisInterfacePart output : super.getOutputs()) { if (output.getRelay() != null) { return output; } @@ -181,6 +182,25 @@ public class VisInterfacePart extends P2PTunnelPart implements return null; } + /** + * 覆写输出端列表:半 P2P 场景下(装配器直接按频率查输入,无标准 P2P 输出端), + * 若存在有效的中继端(findRelayEnd 非空,含自身面对中继的情况), + * 将其视为已链接,使 AE2 P2P 状态显示(Jade/TOP)不再显示"Unlinked"。 + */ + @Override + public List getOutputs() { + List outputs = super.getOutputs(); + if (!outputs.isEmpty()) { + return outputs; + } + VisInterfacePart relayEnd = findRelayEnd(); + if (relayEnd != null) { + // 含自身面对中继的情况:返回 relayEnd(可能是 this),让 P2P 状态显示已链接 + return relayEnd == this ? List.of(this) : List.of(relayEnd); + } + return outputs; + } + private int drawFromRelay(VisRelayBlockEntity relay, ResourceLocation aspectId, int centivis) { if (relay == null) { return 0; diff --git a/src/main/java/thaumicenergistics/common/tiles/TileArcaneAssembler.java b/src/main/java/thaumicenergistics/common/tiles/TileArcaneAssembler.java index 18961f6..50334b7 100644 --- a/src/main/java/thaumicenergistics/common/tiles/TileArcaneAssembler.java +++ b/src/main/java/thaumicenergistics/common/tiles/TileArcaneAssembler.java @@ -483,7 +483,8 @@ public class TileArcaneAssembler extends ThETileBase } } - return new ArcaneAssemblerPattern(AEItemKey.of(result), null, aspects, result, inputs); + return new ArcaneAssemblerPattern(AEItemKey.of(result), null, aspects, result, inputs, + acp.getResearch()); } private boolean beginCrafting(ArcaneAssemblerPattern arcanePattern) { @@ -751,14 +752,22 @@ public class TileArcaneAssembler extends ThETileBase private final AspectList aspects; private final ItemStack resultStack; private final IInput[] inputs; + private final String research; public ArcaneAssemblerPattern(AEItemKey definition, IArcaneRecipe recipe, AspectList aspects, ItemStack resultStack, List inputStacks) { + this(definition, recipe, aspects, resultStack, inputStacks, null); + } + + public ArcaneAssemblerPattern(AEItemKey definition, IArcaneRecipe recipe, + AspectList aspects, ItemStack resultStack, + List inputStacks, String research) { this.definition = definition; this.recipe = recipe; this.aspects = aspects; this.resultStack = resultStack; + this.research = research; this.inputs = new IInput[inputStacks.size()]; for (int i = 0; i < inputStacks.size(); i++) { GenericStack stack = inputStacks.get(i); @@ -820,5 +829,8 @@ public class TileArcaneAssembler extends ThETileBase public IArcaneRecipe getRecipe() { return recipe; } public AspectList getAspects() { return aspects; } public ItemStack getResultStack() { return resultStack; } + /** 对应 TC 奥术配方的研究键;无研究要求/老数据时可能为 null。 */ + @Nullable + public String getResearch() { return research; } } } diff --git a/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftConfirmScreen.java b/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftConfirmScreen.java new file mode 100644 index 0000000..7325088 --- /dev/null +++ b/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftConfirmScreen.java @@ -0,0 +1,29 @@ +package thaumicenergistics.mixins.ae2; + +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 thaumicenergistics.client.ResearchGateOverlay; + +/** + * 拦截 CraftConfirmScreen 打开 CPU 忙错误屏。 + * + * 研究未解锁拦截会触发 AE2 的 CPU_BUSY 错误屏;本 Mixin 在错误屏被 switchToScreen 之前 + * (updateBeforeRender HEAD)检测到研究拦截(ResearchGateOverlay 已有网络包写入的研究键), + * 取消原渲染逻辑,避免打开误导性的"CPU 忙"窗口。 + * 提示文字由 ResearchGateOverlay 在无 GUI 遮挡时绘制。 + */ +@Mixin(targets = "appeng.client.gui.me.crafting.CraftConfirmScreen", remap = false) +public abstract class MixinCraftConfirmScreen { + + @Inject(method = "updateBeforeRender()V", at = @At("HEAD"), cancellable = true, remap = false) + private void thaumicenergistics$blockCpuBusyScreen(CallbackInfo ci) { + // 网络包已写入研究键 = 本次失败是研究拦截,而非真实 CPU 忙碌 + // 使用 submitError 状态而非时间戳:只要错误未被玩家清除就持续拦截,避免过期后弹窗 + if (ResearchGateOverlay.hasResearchGateError()) { + ci.cancel(); + } + } +} diff --git a/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftingService.java b/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftingService.java new file mode 100644 index 0000000..0a6e867 --- /dev/null +++ b/src/main/java/thaumicenergistics/mixins/ae2/MixinCraftingService.java @@ -0,0 +1,73 @@ +package thaumicenergistics.mixins.ae2; + +import java.util.Map; + +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.CallbackInfoReturnable; + +import appeng.api.crafting.IPatternDetails; +import appeng.api.networking.crafting.CraftingSubmitErrorCode; +import appeng.api.networking.crafting.ICraftingCPU; +import appeng.api.networking.crafting.ICraftingPlan; +import appeng.api.networking.crafting.ICraftingRequester; +import appeng.api.networking.crafting.ICraftingSubmitResult; +import appeng.api.networking.security.IActionSource; +import appeng.crafting.execution.CraftingSubmitResult; + +import net.minecraft.world.entity.player.Player; + +import thaumcraft.common.research.TCResearchManager; +import thaumicenergistics.ThaumicEnergistics; +import thaumicenergistics.common.integration.tc.PatternResearchHelper; + +/** + * 使用端研究限制:玩家从 AE 终端发起合成请求时(submitJob), + * 若请求涉及尚未解锁对应 TC 研究的样板(奥术/蒸馏),则拒绝该请求。 + * + * 机器自动合成(IActionSource 无玩家)不拦截。 + */ +@Mixin(targets = "appeng.me.service.CraftingService", remap = false) +public abstract class MixinCraftingService { + + @Inject(method = "submitJob", at = @At("HEAD"), cancellable = true, remap = false) + private void thaumicenergistics$checkResearchBeforeSubmit( + ICraftingPlan job, + ICraftingRequester requestingMachine, + ICraftingCPU target, + boolean prioritizePower, + IActionSource src, + CallbackInfoReturnable cir) { + // 仅玩家发起的请求需要研究校验;机器自动合成放行 + if (src == null || src.player().isEmpty()) { + return; + } + Player player = src.player().get(); + if (player == null) { + return; + } + + for (Map.Entry entry : job.patternTimes().entrySet()) { + IPatternDetails pattern = entry.getKey(); + String research = PatternResearchHelper.getResearch(pattern); + if (research == null || research.isEmpty()) { + continue; // 无研究要求 + } + if (!TCResearchManager.has(player, research)) { + ThaumicEnergistics.LOG.info( + "[AE2ResearchGate] 玩家 {} 未解锁研究 {},拒绝合成请求 (pattern={})", + player.getName().getString(), research, pattern.getDefinition()); + // 通过自定义网络包发送研究键到客户端(AE2 errorDetail 不跨网络传输) + if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { + net.neoforged.neoforge.network.PacketDistributor.sendToPlayer( + serverPlayer, + new thaumicenergistics.common.network.ResearchGateErrorPacket(research)); + } + // 拒绝提交(CPU_BUSY 触发 AE2 错误屏;具体提示由客户端网络包渲染) + cir.setReturnValue(CraftingSubmitResult.simpleError(CraftingSubmitErrorCode.CPU_BUSY)); + return; + } + } + } +} diff --git a/src/main/resources/assets/thaumicenergistics/lang/en_us.json b/src/main/resources/assets/thaumicenergistics/lang/en_us.json index 85af40b..d82c70c 100644 --- a/src/main/resources/assets/thaumicenergistics/lang/en_us.json +++ b/src/main/resources/assets/thaumicenergistics/lang/en_us.json @@ -37,6 +37,9 @@ "tooltip.thaumicenergistics.essentia_storage_bus.desc": "Bidirectionally syncs an external essentia container with the ME network", "tooltip.thaumicenergistics.essentia_storage_bus.hint": "Place on a cable facing an essentia container to use it as network storage", "tooltip.thaumicenergistics.essentia_terminal.desc": "View and extract essentia from the ME network", + "tooltip.thaumicenergistics.arcane_crafting_terminal.desc": "Perform arcane crafting from the ME network", + "tooltip.thaumicenergistics.essentia_level_emitter.desc": "Emits redstone based on essentia levels in the network", + "tooltip.thaumicenergistics.vis_interface.desc": "Bridges the Thaumcraft vis network with the ME network for vis extraction/supply", "ae2.keytype.thaumicenergistics.essentia": "Essentia", "tc.research_category.THAUMICENERGISTICS": "Thaumic Energistics", "tc.research_name.BASEENERGISTICS": "Basic Energistics", diff --git a/src/main/resources/assets/thaumicenergistics/lang/zh_cn.json b/src/main/resources/assets/thaumicenergistics/lang/zh_cn.json index 24df856..9d8c779 100644 --- a/src/main/resources/assets/thaumicenergistics/lang/zh_cn.json +++ b/src/main/resources/assets/thaumicenergistics/lang/zh_cn.json @@ -38,6 +38,9 @@ "tooltip.thaumicenergistics.essentia_storage_bus.desc": "将相邻的源质容器与ME网络双向同步", "tooltip.thaumicenergistics.essentia_storage_bus.hint": "贴在线缆上,把外部源质容器当作ME存储单元使用", "tooltip.thaumicenergistics.essentia_terminal.desc": "查看并取出/存入源质", + "tooltip.thaumicenergistics.arcane_crafting_terminal.desc": "在ME网络上进行奥术合成", + "tooltip.thaumicenergistics.essentia_level_emitter.desc": "根据网络中源质数量输出红石信号", + "tooltip.thaumicenergistics.vis_interface.desc": "将TC要素网络与ME网络桥接,可抽取/供给要素", "ae2.keytype.thaumicenergistics.essentia": "源质", diff --git a/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/clay.png b/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/clay.png deleted file mode 100644 index 3e8f4b7387ef2fd20ce7cbdd4c9803e771f31773..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4252 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 A0RR91 diff --git a/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/gold.png b/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/gold.png deleted file mode 100644 index 6c98730ec65364c9d1cfc5c8863adfe6b166afa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4348 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 diff --git a/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/stone.png b/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/stone.png deleted file mode 100644 index ea52fceec4b2b257988899c00372e4a275cadae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4343 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 diff --git a/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/thaum.png b/src/main/resources/assets/thaumicenergistics/textures/model/golembackpack/thaum.png deleted file mode 100644 index effad48564cac485be6da2fdb78231014a807f62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3836 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