Skip to content

Commit c41200e

Browse files
authored
Update to snapshot 25w09a & Improve Rendering Code (#831)
* Improve rendering code to prep for 25w08a * [25w08a] Update to latest snapshot as of 2/20/25 * Use Identifier Path in NativeImageBackedTexture supplier * Small formatting cleanup * Update to 25w09a * Update to 25w10a * Undo accidental API change * Include editor config - Update to 25w09a
1 parent 521f7af commit c41200e

43 files changed

Lines changed: 878 additions & 639 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.editorconfig

Lines changed: 399 additions & 4 deletions
Large diffs are not rendered by default.

build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id 'fabric-loom' version '1.8-SNAPSHOT'
2+
id 'fabric-loom' version '1.10-SNAPSHOT'
33
}
44

55
apply from: 'https://raw.githubusercontent.com/TerraformersMC/GradleScripts/2.7/ferry.gradle'
@@ -26,10 +26,12 @@ repositories {
2626
name = 'TerraformersMC'
2727
url = 'https://maven.terraformersmc.com/'
2828
}
29+
2930
maven {
3031
name = 'Quilt'
3132
url = 'https://maven.quiltmc.org/repository/release'
3233
}
34+
3335
maven {
3436
name = 'Nucleoid'
3537
url = 'https://maven.nucleoid.xyz/'

gradle.properties

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
org.gradle.jvmargs=-Xmx1G
1+
org.gradle.jvmargs=-Xmx2G
22

33
maven_group=com.terraformersmc
44
archive_name=modmenu
55

6-
minecraft_version=25w06a
7-
yarn_mappings=25w06a+build.1
6+
minecraft_version=25w10a
7+
yarn_mappings=25w10a+build.3
88
loader_version=0.16.10
9-
fabric_version=0.115.3+1.21.5
10-
text_placeholder_api_version=2.5.1+1.21.3
11-
quilt_loader_version=0.26.4
9+
fabric_version=0.118.4+1.21.5
10+
text_placeholder_api_version=2.5.2+1.21.3
11+
quilt_loader_version=0.28.0-beta.8
1212

1313
# Project Metadata
1414
project_name=Mod Menu

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

src/main/java/com/terraformersmc/modmenu/ModMenu.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ public class ModMenu implements ClientModInitializer {
4040
public static final Gson GSON_MINIFIED;
4141

4242
static {
43-
GsonBuilder builder = new GsonBuilder().registerTypeHierarchyAdapter(Enum.class,
44-
new EnumToLowerCaseJsonConverter()
45-
)
46-
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
43+
GsonBuilder builder = new GsonBuilder().registerTypeHierarchyAdapter(Enum.class, new EnumToLowerCaseJsonConverter()).setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
4744
GSON = builder.setPrettyPrinting().create();
4845
GSON_MINIFIED = builder.create();
4946
}
@@ -68,8 +65,9 @@ public static boolean hasConfigScreen(String modId) {
6865
ConfigScreenFactory<?> factory = getConfigScreenFactory(modId);
6966
if (factory != null) {
7067
return factory.create(parent);
68+
} else {
69+
return null;
7170
}
72-
return null;
7371
}
7472

7573
private static @Nullable ConfigScreenFactory<?> getConfigScreenFactory(String modId) {
@@ -116,15 +114,13 @@ public void onInitializeClient() {
116114
//noinspection deprecation
117115
for (ModContainer modContainer : FabricLoader.getInstance().getAllMods()) {
118116
Mod mod;
119-
120117
if (RUNNING_QUILT) {
121118
mod = new QuiltMod(modContainer, modpackMods);
122119
} else {
123120
mod = new FabricMod(modContainer, modpackMods);
124121
}
125122

126123
var updateChecker = updateCheckers.get(mod.getId());
127-
128124
if (updateChecker == null) {
129125
updateChecker = providedUpdateCheckers.get(mod.getId());
130126
}
@@ -168,13 +164,15 @@ public void onInitializeClient() {
168164
parent = null;
169165
break;
170166
}
167+
171168
modParentSet.add(parentId);
172169
}
173170

174171
if (parent == null) {
175172
ROOT_MODS.put(mod.getId(), mod);
176173
continue;
177174
}
175+
178176
PARENT_MAP.put(parent, mod);
179177
}
180178

@@ -224,13 +222,16 @@ public static String getDisplayedModCount() {
224222
if (!includeChildren && isChild) {
225223
return false;
226224
}
225+
227226
boolean isLibrary = mod.getBadges().contains(Mod.Badge.LIBRARY);
228227
if (!includeLibraries && isLibrary) {
229228
return false;
230229
}
230+
231231
return includeHidden || !mod.isHidden();
232232
}).count());
233233
}
234+
234235
return NumberFormat.getInstance().format(cachedDisplayedModCount);
235236
}
236237

src/main/java/com/terraformersmc/modmenu/api/ModMenuApi.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.function.Consumer;
1010

1111
public interface ModMenuApi {
12-
1312
/**
1413
* Used for creating a {@link Screen} instance of the Mod Menu
1514
* "Mods" screen

src/main/java/com/terraformersmc/modmenu/api/UpdateChannel.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
* Supported update channels, in ascending order by stability.
77
*/
88
public enum UpdateChannel {
9-
ALPHA, BETA, RELEASE;
9+
ALPHA,
10+
BETA,
11+
RELEASE;
1012

1113
/**
1214
* @return the user's preferred update channel.

src/main/java/com/terraformersmc/modmenu/config/FileOnlyConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77

88
@Retention(RetentionPolicy.RUNTIME)
99
@Target(ElementType.FIELD)
10-
public @interface FileOnlyConfig { }
10+
public @interface FileOnlyConfig {
11+
}

src/main/java/com/terraformersmc/modmenu/config/ModMenuConfig.java

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.terraformersmc.modmenu.api.UpdateChannel;
55
import com.terraformersmc.modmenu.config.option.BooleanConfigOption;
66
import com.terraformersmc.modmenu.config.option.EnumConfigOption;
7-
import com.terraformersmc.modmenu.config.option.OptionConvertable;
7+
import com.terraformersmc.modmenu.config.option.OptionConvertible;
88
import com.terraformersmc.modmenu.config.option.StringSetConfigOption;
99
import com.terraformersmc.modmenu.util.mod.Mod;
1010
import net.minecraft.client.option.SimpleOption;
@@ -21,16 +21,10 @@ public class ModMenuConfig {
2121
public static final BooleanConfigOption COUNT_LIBRARIES = new BooleanConfigOption("count_libraries", true);
2222
public static final BooleanConfigOption COMPACT_LIST = new BooleanConfigOption("compact_list", false);
2323
public static final BooleanConfigOption COUNT_CHILDREN = new BooleanConfigOption("count_children", true);
24-
public static final EnumConfigOption<TitleMenuButtonStyle> MODS_BUTTON_STYLE = new EnumConfigOption<>("mods_button_style",
25-
TitleMenuButtonStyle.CLASSIC
26-
);
27-
public static final EnumConfigOption<GameMenuButtonStyle> GAME_MENU_BUTTON_STYLE = new EnumConfigOption<>("game_menu_button_style",
28-
GameMenuButtonStyle.REPLACE
29-
);
24+
public static final EnumConfigOption<TitleMenuButtonStyle> MODS_BUTTON_STYLE = new EnumConfigOption<>("mods_button_style", TitleMenuButtonStyle.CLASSIC);
25+
public static final EnumConfigOption<GameMenuButtonStyle> GAME_MENU_BUTTON_STYLE = new EnumConfigOption<>("game_menu_button_style", GameMenuButtonStyle.REPLACE);
3026
public static final BooleanConfigOption COUNT_HIDDEN_MODS = new BooleanConfigOption("count_hidden_mods", true);
31-
public static final EnumConfigOption<ModCountLocation> MOD_COUNT_LOCATION = new EnumConfigOption<>("mod_count_location",
32-
ModCountLocation.TITLE_SCREEN
33-
);
27+
public static final EnumConfigOption<ModCountLocation> MOD_COUNT_LOCATION = new EnumConfigOption<>("mod_count_location", ModCountLocation.TITLE_SCREEN);
3428
public static final BooleanConfigOption HIDE_MOD_LINKS = new BooleanConfigOption("hide_mod_links", false);
3529
public static final BooleanConfigOption SHOW_LIBRARIES = new BooleanConfigOption("show_libraries", false);
3630
public static final BooleanConfigOption HIDE_MOD_LICENSE = new BooleanConfigOption("hide_mod_license", false);
@@ -39,14 +33,10 @@ public class ModMenuConfig {
3933
public static final BooleanConfigOption EASTER_EGGS = new BooleanConfigOption("easter_eggs", true);
4034
public static final BooleanConfigOption RANDOM_JAVA_COLORS = new BooleanConfigOption("random_java_colors", false);
4135
public static final BooleanConfigOption TRANSLATE_NAMES = new BooleanConfigOption("translate_names", true);
42-
public static final BooleanConfigOption TRANSLATE_DESCRIPTIONS = new BooleanConfigOption("translate_descriptions",
43-
true
44-
);
36+
public static final BooleanConfigOption TRANSLATE_DESCRIPTIONS = new BooleanConfigOption("translate_descriptions", true);
4537
public static final BooleanConfigOption UPDATE_CHECKER = new BooleanConfigOption("update_checker", true);
4638
public static final BooleanConfigOption BUTTON_UPDATE_BADGE = new BooleanConfigOption("button_update_badge", true);
47-
public static final EnumConfigOption<UpdateChannel> UPDATE_CHANNEL = new EnumConfigOption<>("update_channel",
48-
UpdateChannel.RELEASE
49-
);
39+
public static final EnumConfigOption<UpdateChannel> UPDATE_CHANNEL = new EnumConfigOption<>("update_channel", UpdateChannel.RELEASE);
5040
public static final BooleanConfigOption QUICK_CONFIGURE = new BooleanConfigOption("quick_configure", true);
5141

5242
@FileOnlyConfig
@@ -58,34 +48,29 @@ public class ModMenuConfig {
5848
@FileOnlyConfig
5949
public static final BooleanConfigOption CONFIG_MODE = new BooleanConfigOption("config_mode", false);
6050
@FileOnlyConfig
61-
public static final BooleanConfigOption DISABLE_DRAG_AND_DROP = new BooleanConfigOption("disable_drag_and_drop",
62-
false
63-
);
51+
public static final BooleanConfigOption DISABLE_DRAG_AND_DROP = new BooleanConfigOption("disable_drag_and_drop", false);
6452
@FileOnlyConfig
6553
public static final StringSetConfigOption HIDDEN_MODS = new StringSetConfigOption("hidden_mods", new HashSet<>());
6654
@FileOnlyConfig
67-
public static final StringSetConfigOption HIDDEN_CONFIGS = new StringSetConfigOption("hidden_configs",
68-
new HashSet<>()
69-
);
55+
public static final StringSetConfigOption HIDDEN_CONFIGS = new StringSetConfigOption("hidden_configs", new HashSet<>());
7056
@FileOnlyConfig
71-
public static final StringSetConfigOption DISABLE_UPDATE_CHECKER = new StringSetConfigOption("disable_update_checker",
72-
new HashSet<>()
73-
);
57+
public static final StringSetConfigOption DISABLE_UPDATE_CHECKER = new StringSetConfigOption("disable_update_checker", new HashSet<>());
7458

7559
public static SimpleOption<?>[] asOptions() {
7660
ArrayList<SimpleOption<?>> options = new ArrayList<>();
7761
for (Field field : ModMenuConfig.class.getDeclaredFields()) {
7862
if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()) &&
79-
OptionConvertable.class.isAssignableFrom(field.getType()) &&
63+
OptionConvertible.class.isAssignableFrom(field.getType()) &&
8064
!field.isAnnotationPresent(FileOnlyConfig.class)) {
8165
try {
82-
options.add(((OptionConvertable) field.get(null)).asOption());
66+
options.add(((OptionConvertible) field.get(null)).asOption());
8367
} catch (IllegalAccessException e) {
8468
e.printStackTrace();
8569
}
8670
}
8771
}
88-
return options.stream().toArray(SimpleOption[]::new);
72+
73+
return options.toArray(SimpleOption[]::new);
8974
}
9075

9176
public enum Sorting {
@@ -105,9 +90,10 @@ public Comparator<Mod> getComparator() {
10590
}
10691

10792
public enum ModCountLocation {
108-
TITLE_SCREEN(true, false), MODS_BUTTON(false, true), TITLE_SCREEN_AND_MODS_BUTTON(true, true), NONE(false,
109-
false
110-
);
93+
TITLE_SCREEN(true, false),
94+
MODS_BUTTON(false, true),
95+
TITLE_SCREEN_AND_MODS_BUTTON(true, true),
96+
NONE(false, false);
11197

11298
private final boolean titleScreen, modsButton;
11399

@@ -126,10 +112,13 @@ public boolean isOnModsButton() {
126112
}
127113

128114
public enum TitleMenuButtonStyle {
129-
CLASSIC(), REPLACE_REALMS(), SHRINK(), ICON()
115+
CLASSIC,
116+
REPLACE_REALMS,
117+
SHRINK,
118+
ICON
130119
}
131120

132121
public enum GameMenuButtonStyle {
133-
@SerializedName(value = "replace", alternate = { "replace_bugs" }) REPLACE, @SerializedName(value = "insert", alternate = { "below_bugs" }) INSERT, ICON
122+
@SerializedName(value = "replace", alternate = {"replace_bugs"}) REPLACE, @SerializedName(value = "insert", alternate = {"below_bugs"}) INSERT, ICON
134123
}
135124
}

src/main/java/com/terraformersmc/modmenu/config/ModMenuConfigManager.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ public class ModMenuConfigManager {
2525
private static Path path;
2626

2727
private static void prepareConfigPath() {
28-
if (path != null) {
29-
return;
28+
if (path == null) {
29+
path = FabricLoader.getInstance().getConfigDir().resolve(ModMenu.MOD_ID + ".json");
3030
}
31-
path = FabricLoader.getInstance().getConfigDir().resolve(ModMenu.MOD_ID + ".json");
3231
}
3332

3433
public static void initializeConfig() {
@@ -43,10 +42,10 @@ private static void load() {
4342
if (!Files.exists(path)) {
4443
save();
4544
}
45+
4646
if (Files.exists(path)) {
4747
BufferedReader br = Files.newBufferedReader(path);
48-
JsonObject json = new JsonParser().parse(br).getAsJsonObject();
49-
48+
JsonObject json = JsonParser.parseReader(br).getAsJsonObject();
5049
for (Field field : ModMenuConfig.class.getDeclaredFields()) {
5150
if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) {
5251
if (StringSetConfigOption.class.isAssignableFrom(field.getType())) {
@@ -62,15 +61,13 @@ private static void load() {
6261
);
6362
}
6463
} else if (BooleanConfigOption.class.isAssignableFrom(field.getType())) {
65-
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive(field.getName()
66-
.toLowerCase(Locale.ROOT));
64+
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive(field.getName().toLowerCase(Locale.ROOT));
6765
if (jsonPrimitive != null && jsonPrimitive.isBoolean()) {
6866
BooleanConfigOption option = (BooleanConfigOption) field.get(null);
6967
ConfigOptionStorage.setBoolean(option.getKey(), jsonPrimitive.getAsBoolean());
7068
}
7169
} else if (EnumConfigOption.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType) {
72-
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive(field.getName()
73-
.toLowerCase(Locale.ROOT));
70+
JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive(field.getName().toLowerCase(Locale.ROOT));
7471
if (jsonPrimitive != null && jsonPrimitive.isString()) {
7572
Type generic = ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
7673
if (generic instanceof Class<?>) {
@@ -82,6 +79,7 @@ private static void load() {
8279
break;
8380
}
8481
}
82+
8583
if (found != null) {
8684
ConfigOptionStorage.setEnumTypeless(option.getKey(), found);
8785
}
@@ -101,17 +99,13 @@ private static void load() {
10199
public static void save() {
102100
ModMenu.clearModCountCache();
103101
prepareConfigPath();
104-
105102
JsonObject config = new JsonObject();
106-
107103
try {
108104
for (Field field : ModMenuConfig.class.getDeclaredFields()) {
109105
if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers())) {
110106
if (BooleanConfigOption.class.isAssignableFrom(field.getType())) {
111107
BooleanConfigOption option = (BooleanConfigOption) field.get(null);
112-
config.addProperty(field.getName().toLowerCase(Locale.ROOT),
113-
ConfigOptionStorage.getBoolean(option.getKey())
114-
);
108+
config.addProperty(field.getName().toLowerCase(Locale.ROOT), ConfigOptionStorage.getBoolean(option.getKey()));
115109
} else if (StringSetConfigOption.class.isAssignableFrom(field.getType())) {
116110
StringSetConfigOption option = (StringSetConfigOption) field.get(null);
117111
JsonArray array = new JsonArray();
@@ -121,11 +115,7 @@ public static void save() {
121115
Type generic = ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0];
122116
if (generic instanceof Class<?>) {
123117
EnumConfigOption<?> option = (EnumConfigOption<?>) field.get(null);
124-
config.addProperty(field.getName().toLowerCase(Locale.ROOT),
125-
ConfigOptionStorage.getEnumTypeless(option.getKey(), (Class<Enum<?>>) generic)
126-
.name()
127-
.toLowerCase(Locale.ROOT)
128-
);
118+
config.addProperty(field.getName().toLowerCase(Locale.ROOT), ConfigOptionStorage.getEnumTypeless(option.getKey(), (Class<Enum<?>>) generic).name().toLowerCase(Locale.ROOT));
129119
}
130120
}
131121
}
@@ -135,7 +125,6 @@ public static void save() {
135125
}
136126

137127
String jsonString = ModMenu.GSON.toJson(config);
138-
139128
try (BufferedWriter fileWriter = Files.newBufferedWriter(path)) {
140129
fileWriter.write(jsonString);
141130
} catch (IOException e) {

0 commit comments

Comments
 (0)