Skip to content

Commit 3273f50

Browse files
committed
add method to register fields from other classes
1 parent e0b5188 commit 3273f50

File tree

1 file changed

+30
-6
lines changed

1 file changed

+30
-6
lines changed

src/main/java/gregtech/api/capability/GregtechDataCodes.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package gregtech.api.capability;
22

3+
import gregtech.common.covers.ender.CoverAbstractEnderLink;
4+
import gregtech.common.metatileentities.multi.multiblockpart.MetaTileEntityFluidHatch;
5+
36
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap;
47
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
8+
import org.apache.commons.lang3.ArrayUtils;
59

610
import java.lang.reflect.Field;
11+
import java.lang.reflect.Modifier;
712

813
public class GregtechDataCodes {
914

@@ -190,15 +195,34 @@ public static int assignId() {
190195
public static final Int2ObjectMap<String> NAMES = new Int2ObjectArrayMap<>();
191196

192197
static {
198+
registerFields(GregtechDataCodes.class);
199+
// todo these really should be moved to this class
200+
registerFields(CoverAbstractEnderLink.class, CoverAbstractEnderLink.UPDATE_PRIVATE);
201+
registerFields(MetaTileEntityFluidHatch.class, MetaTileEntityFluidHatch.LOCK_FILL);
202+
}
203+
204+
public static String getNameFor(int id) {
205+
return NAMES.getOrDefault(id, "Unknown_DataCode:" + id);
206+
}
207+
208+
/**
209+
* Registers all fields from the passed in class to the name registry.
210+
* Optionally, you can pass in a list of valid ids to check against so that errant ids are not added
211+
*
212+
* @param clazz Class to iterate fields
213+
* @param validIds optional array of valid ids to check against class fields
214+
*/
215+
public static void registerFields(Class<?> clazz, int... validIds) {
193216
try {
194-
for (Field field : GregtechDataCodes.class.getFields()) {
217+
for (Field field : clazz.getDeclaredFields()) {
195218
if (field.getType() != Integer.TYPE) continue;
196-
NAMES.put(field.getInt(null), field.getName());
219+
if (!Modifier.isStatic(field.getModifiers())) continue;
220+
if (!Modifier.isFinal(field.getModifiers())) continue;
221+
int id = field.getInt(null);
222+
if (!ArrayUtils.isEmpty(validIds) && !ArrayUtils.contains(validIds, id))
223+
continue;
224+
NAMES.put(id, field.getName() + ":" + id);
197225
}
198226
} catch (IllegalAccessException ignored) {}
199227
}
200-
201-
public static String getNameFor(int id) {
202-
return NAMES.getOrDefault(id, "Unknown DataCode: " + id);
203-
}
204228
}

0 commit comments

Comments
 (0)