Skip to content

Commit 00c059c

Browse files
committed
允许主动注册黑名单而不是仅依赖于配置文件
1 parent 3936233 commit 00c059c

1 file changed

Lines changed: 42 additions & 11 deletions

File tree

src/main/java/com/circulation/circulation_networks/registry/RegistryEnergyHandler.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)