From 6d530b8f964d35c5815c024e5bfe16be1308eacf Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Fri, 27 Mar 2026 23:38:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BD=BF=E7=94=A8=E6=A0=87?= =?UTF-8?q?=E7=AD=BE=E6=97=A0=E7=BA=BF=E6=94=B6=E5=8F=91=E5=99=A8=E6=97=B6?= =?UTF-8?q?=E5=81=B6=E7=8E=B0=E9=80=80=E5=87=BA=E6=B8=B8=E6=88=8F=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E4=BF=9D=E5=AD=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 +- .../ae/wireless/LabelLink.java | 49 +++++++++++++++++++ ...LabeledWirelessTransceiverBlockEntity.java | 26 ++++++++-- 3 files changed, 75 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index d60967a..c63766a 100644 --- a/build.gradle +++ b/build.gradle @@ -91,7 +91,7 @@ dependencies { modImplementation "curse.maven:mega-cells-622112:${mega_cells_version}" //mae2 - modRuntimeOnly "curse.maven:modern-ae2-additions-1028068:6827727" + //modRuntimeOnly "curse.maven:modern-ae2-additions-1028068:6827727" modCompileOnly "curse.maven:modern-ae2-additions-1028068:6827727" //aea @@ -115,7 +115,8 @@ dependencies { modRuntimeOnly "curse.maven:cloth-config-348521:5729105" //jec - modImplementation "curse.maven:just-enough-characters-250702:6680042" + modCompileClasspath "curse.maven:just-enough-characters-250702:6680042" + modRuntimeOnly "curse.maven:just-enough-characters-250702:6680042" //geckolib modRuntimeOnly "curse.maven:geckolib-388172:6920925" diff --git a/src/main/java/com/extendedae_plus/ae/wireless/LabelLink.java b/src/main/java/com/extendedae_plus/ae/wireless/LabelLink.java index aace038..e1ef8df 100644 --- a/src/main/java/com/extendedae_plus/ae/wireless/LabelLink.java +++ b/src/main/java/com/extendedae_plus/ae/wireless/LabelLink.java @@ -1,6 +1,7 @@ package com.extendedae_plus.ae.wireless; import appeng.api.networking.GridHelper; +import appeng.api.networking.IGridConnection; import appeng.api.networking.IGridNode; import appeng.me.service.helpers.ConnectionWrapper; import net.minecraft.resources.ResourceKey; @@ -88,14 +89,62 @@ public class LabelLink { } public void onUnloadOrRemove() { + this.target = null; destroyConnection(); } private void destroyConnection() { var current = connection.getConnection(); if (current != null) { + var a = current.a(); + var b = current.b(); current.destroy(); + try { + if (a != null && a.getGrid() != null) { + a.getGrid().getTickManager().wakeDevice(a); + } + } catch (Throwable ignored) {} + try { + if (b != null && b.getGrid() != null) { + b.getGrid().getTickManager().wakeDevice(b); + } + } catch (Throwable ignored) {} connection.setConnection(null); + } else { + try { + IGridNode hostNode = this.host.getGridNode(); + IGridNode targetNode = this.target == null ? null : this.target.node(); + if (hostNode != null && targetNode != null) { + IGridConnection existing = this.findExistingConnection(hostNode, targetNode); + if (existing != null) { + existing.destroy(); + try { + if (hostNode.getGrid() != null) { + hostNode.getGrid().getTickManager().wakeDevice(hostNode); + } + } catch (Throwable ignored) {} + try { + if (targetNode.getGrid() != null) { + targetNode.getGrid().getTickManager().wakeDevice(targetNode); + } + } catch (Throwable ignored) {} + } + } + } catch (Throwable ignored) {} } } + + @Nullable + private IGridConnection findExistingConnection(IGridNode a, IGridNode b) { + try { + for (IGridConnection gc : a.getConnections()) { + var ga = gc.a(); + var gb = gc.b(); + if ((ga == a || gb == a) && (ga == b || gb == b)) { + return gc; + } + } + } catch (Throwable ignored) {} + return null; + } } diff --git a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java index 9cab499..de703c6 100644 --- a/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/wireless/LabeledWirelessTransceiverBlockEntity.java @@ -184,14 +184,34 @@ public class LabeledWirelessTransceiverBlockEntity extends AEBaseBlockEntity imp } public void onRemoved() { + cleanupForRemoval(); + } + + @Override + public void onChunkUnloaded() { + cleanupForRemoval(); + super.onChunkUnloaded(); + } + + @Override + public void setRemoved() { + cleanupForRemoval(); + super.setRemoved(); + } + + private void cleanupForRemoval() { + if (this.beingRemoved) { + return; + } + this.beingRemoved = true; - labelLink.onUnloadOrRemove(); + this.labelLink.onUnloadOrRemove(); ServerLevel sl = getServerLevel(); if (sl != null) { LabelNetworkRegistry.get(sl).unregister(this); } - if (managedNode != null) { - managedNode.destroy(); + if (this.managedNode != null) { + this.managedNode.destroy(); } }