Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/lang-pattern' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
Dream-Master committed Sep 6, 2024
2 parents fa06c3a + 7c591a6 commit 4e656d4
Showing 1 changed file with 30 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class ConfigurationManager {
static final Logger LOGGER = LogManager.getLogger("GTNHLibConfig");
private static final Map<String, Configuration> configs = new HashMap<>();
private static final Map<Configuration, Map<String, Set<Class<?>>>> configToCategoryClassMap = new HashMap<>();
private static final String[] langKeyPlaceholders = new String[] { "%mod", "%cat", "%file", "%field" };
private static final String[] langKeyPlaceholders = new String[] { "%mod", "%file", "%cat", "%field" };

private static final ConfigurationManager instance = new ConfigurationManager();

Expand Down Expand Up @@ -138,20 +138,15 @@ private static void processSubCategory(Object instance, Configuration config, Fi
val langKey = getLangKey(
subCategoryField.getType(),
subCategoryField.getAnnotation(Config.LangKey.class),
name,
subCat.getName(),
true);
null,
subCat.getName());

subCat.setComment(comment);
subCat.setLanguageKey(langKey);
if (subCategoryField.isAnnotationPresent(Config.RequiresMcRestart.class)
|| getClassOrBaseAnnotation(subCategoryField.getDeclaringClass(), Config.RequiresMcRestart.class)
!= null) {
if (subCategoryField.isAnnotationPresent(Config.RequiresMcRestart.class)) {
subCat.setRequiresMcRestart(true);
}
if (subCategoryField.isAnnotationPresent(Config.RequiresWorldRestart.class)
|| getClassOrBaseAnnotation(subCategoryField.getDeclaringClass(), Config.RequiresWorldRestart.class)
!= null) {
if (subCategoryField.isAnnotationPresent(Config.RequiresWorldRestart.class)) {
subCat.setRequiresWorldRestart(true);
}

Expand All @@ -168,8 +163,11 @@ private static void processConfigInternal(Class<?> configClass, String category,
@Nullable Object instance) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException,
NoSuchFieldException, ConfigException {
boolean foundCategory = !category.isEmpty();
boolean requiresMcRestart = configClass.isAnnotationPresent(Config.RequiresMcRestart.class);
boolean requiresWorldRestart = configClass.isAnnotationPresent(Config.RequiresWorldRestart.class);
ConfigCategory cat = foundCategory ? rawConfig.getCategory(category) : null;
boolean requiresMcRestart = getClassOrBaseAnnotation(configClass, Config.RequiresMcRestart.class) != null
|| foundCategory && cat.requiresMcRestart();
boolean requiresWorldRestart = getClassOrBaseAnnotation(configClass, Config.RequiresWorldRestart.class) != null
|| foundCategory && cat.requiresWorldRestart();

for (val field : configClass.getDeclaredFields()) {
if (instance != null && Modifier.isStatic(field.getModifiers())) {
Expand Down Expand Up @@ -204,33 +202,31 @@ private static void processConfigInternal(Class<?> configClass, String category,

if (category.isEmpty()) continue;

val fieldName = ConfigFieldParser.getFieldName(field);
val langKey = getLangKey(
configClass,
field.getAnnotation(Config.LangKey.class),
fieldName,
category,
false);
ConfigFieldParser.getFieldName(field),
category);
ConfigFieldParser.loadField(instance, field, rawConfig, category, langKey);

requiresMcRestart |= field.isAnnotationPresent(Config.RequiresMcRestart.class);
requiresWorldRestart |= field.isAnnotationPresent(Config.RequiresWorldRestart.class);
if (!requiresMcRestart) {
requiresMcRestart = field.isAnnotationPresent(Config.RequiresMcRestart.class);
}

if (!requiresWorldRestart) {
requiresWorldRestart = field.isAnnotationPresent(Config.RequiresWorldRestart.class);
}
}

if (!foundCategory) {
throw new ConfigException("No category found for config class " + configClass.getName() + "!");
}

val cat = rawConfig.getCategory(category);
val langKey = getLangKey(
configClass,
configClass.getAnnotation(Config.LangKey.class),
null,
cat.getName(),
true);
if (category.isEmpty()) return;
val langKey = getLangKey(configClass, configClass.getAnnotation(Config.LangKey.class), null, cat.getName());
cat.setLanguageKey(langKey);
if (requiresMcRestart) cat.setRequiresMcRestart(true);
if (requiresWorldRestart) cat.setRequiresWorldRestart(true);
cat.setRequiresMcRestart(requiresMcRestart);
cat.setRequiresWorldRestart(requiresWorldRestart);
}

/**
Expand Down Expand Up @@ -349,7 +345,7 @@ private static IConfigElementProxy<?> getProxyElement(IConfigElement<?> element,
}

private static String getLangKey(Class<?> configClass, @Nullable Config.LangKey langKey, @Nullable String fieldName,
String categoryName, boolean isCategory) throws ConfigException {
String categoryName) throws ConfigException {
if (langKey != null) return langKey.value();

Config.LangKeyPattern pattern = getClassOrBaseAnnotation(configClass, Config.LangKeyPattern.class);
Expand All @@ -365,19 +361,21 @@ private static String getLangKey(Class<?> configClass, @Nullable Config.LangKey
// Config annotation can't be null at this point
assert cfg != null;

return buildKeyFromPattern(cfg, patternStr, name, isCategory);
return buildKeyFromPattern(patternStr, cfg.modid(), cfg.filename(), categoryName, name);
}

private static String buildKeyFromPattern(Config cfg, String pattern, String fieldName, boolean isCategory) {
private static String buildKeyFromPattern(String pattern, String modId, String fileName, String categoryName,
String fieldName) {
StringBuilder s = new StringBuilder(pattern);
String[] replacements = new String[] { cfg.modid(), cfg.category(), cfg.filename(), fieldName };
String[] replacements = new String[] { modId, fileName, categoryName, fieldName };
boolean isCategory = categoryName.equals(fieldName);
for (int i = 0; i < langKeyPlaceholders.length; i++) {
String placeholder = langKeyPlaceholders[i];
int index = s.indexOf(placeholder);
if (index == -1) continue;
int nextIndex = index + placeholder.length();
if (isCategory && "%field".equals(placeholder)) {
if (s.charAt(index + 1) == '.') {
if (nextIndex + 1 <= s.length() && s.charAt(nextIndex + 1) == '.') {
s.delete(index, nextIndex + 1);
} else {
s.delete(index - 1, nextIndex);
Expand Down

0 comments on commit 4e656d4

Please sign in to comment.