@@ -23,14 +23,39 @@ public final class RegistryEnergyHandler {
2323 private static Class <?>[] supplyBlackListClass ;
2424 private static List <IEnergyHandlerManager > list = new ObjectArrayList <>();
2525
26+ private static ReferenceSet <Class <?>> registeredBlackClasses = new ReferenceOpenHashSet <>();
27+ private static ReferenceSet <Class <?>> registeredSupplyBlackClasses = new ReferenceOpenHashSet <>();
28+
2629 /**
27- * 只允许在postinit阶段前进行注册
30+ * Registers an energy handler manager. Must be called before {@link #lock()}.
2831 */
2932 public static void registerEnergyHandler (IEnergyHandlerManager manager ) {
3033 list .add (manager );
3134 IEnergyHandler .POOL .put (manager .getEnergyHandlerClass (), new ArrayDeque <>());
3235 }
3336
37+ /**
38+ * Registers a tile entity class to be excluded from automatic energy network integration.
39+ * Node-based tile entities (implementing {@link IMachineNode}) are automatically blacklisted
40+ * and do not need to be registered here.
41+ * Must be called before {@link #lock()}.
42+ *
43+ * @param clazz the tile entity class to blacklist from energy handling
44+ */
45+ public static void registerBlackClass (Class <?> clazz ) {
46+ registeredBlackClasses .add (clazz );
47+ }
48+
49+ /**
50+ * Registers a tile entity class to be excluded from energy supply operations.
51+ * Must be called before {@link #lock()}.
52+ *
53+ * @param clazz the tile entity class to blacklist from energy supply
54+ */
55+ public static void registerSupplyBlackClass (Class <?> clazz ) {
56+ registeredSupplyBlackClasses .add (clazz );
57+ }
58+
3459 public static boolean isBlack (TileEntity tileEntity ) {
3560 if (tileEntity .getCapability (CommonProxy .nodeCapability , null ) instanceof IMachineNode ) return true ;
3661 if (blackListClass == null ) return false ;
@@ -83,8 +108,8 @@ public static void lock() {
83108
84109 final List <String > blackPrefixes = new ObjectArrayList <>();
85110 final List <String > supplyPrefixes = new ObjectArrayList <>();
86- final ReferenceSet <Class <?>> blackSet = new ReferenceOpenHashSet <>() ;
87- final ReferenceSet <Class <?>> supplySet = new ReferenceOpenHashSet <>() ;
111+ final ReferenceSet <Class <?>> blackSet = registeredBlackClasses ;
112+ final ReferenceSet <Class <?>> supplySet = registeredSupplyBlackClasses ;
88113
89114 collectExactClasses (CFNConfig .classNames , blackSet , blackPrefixes );
90115 collectExactClasses (CFNConfig .supplyClassNames , supplySet , supplyPrefixes );
@@ -93,16 +118,16 @@ public static void lock() {
93118 for (var aClass : TileEntity .REGISTRY ) {
94119 var className = aClass .getName ();
95120 if (!blackPrefixes .isEmpty () && !blackSet .contains (aClass )) {
96- for (String s : blackPrefixes ) {
97- if (className .startsWith (s )) {
121+ for (String prefix : blackPrefixes ) {
122+ if (className .startsWith (prefix )) {
98123 blackSet .add (aClass );
99124 break ;
100125 }
101126 }
102127 }
103128 if (!supplyPrefixes .isEmpty () && !supplySet .contains (aClass )) {
104- for (String s : supplyPrefixes ) {
105- if (className .startsWith (s )) {
129+ for (String prefix : supplyPrefixes ) {
130+ if (className .startsWith (prefix )) {
106131 supplySet .add (aClass );
107132 break ;
108133 }
@@ -111,17 +136,23 @@ public static void lock() {
111136 }
112137 }
113138
114- RegistryEnergyHandler .blackListClass = blackSet .isEmpty () ? null : blackSet .toArray (new Class [0 ]);
115- RegistryEnergyHandler .supplyBlackListClass = supplySet .isEmpty () ? null : supplySet .toArray (new Class [0 ]);
139+ blackListClass = blackSet .isEmpty () ? null : blackSet .toArray (new Class [0 ]);
140+ supplyBlackListClass = supplySet .isEmpty () ? null : supplySet .toArray (new Class [0 ]);
141+
142+ registeredBlackClasses .clear ();
143+ registeredSupplyBlackClasses .clear ();
144+
145+ registeredBlackClasses = null ;
146+ registeredSupplyBlackClasses = null ;
116147 }
117148
118- private static void collectExactClasses (String [] names , ReferenceSet <Class <?>> set , List <String > prefixes ) {
149+ private static void collectExactClasses (String [] names , ReferenceSet <Class <?>> classSet , List <String > prefixes ) {
119150 if (names == null ) return ;
120151 for (String className : names ) {
121152 if (className == null || className .trim ().isEmpty ()) continue ;
122153 className = className .trim ();
123154 try {
124- set .add (Class .forName (className ));
155+ classSet .add (Class .forName (className ));
125156 } catch (ClassNotFoundException e ) {
126157 prefixes .add (className );
127158 }
0 commit comments