Skip to content

Commit 01f62b0

Browse files
committed
Close #1246
1 parent 97348dc commit 01f62b0

File tree

3 files changed

+97
-4
lines changed

3 files changed

+97
-4
lines changed

runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigManagerImpl.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,10 @@ public ConfigManagerImpl() {
152152
, (field) -> field.getType() == Map.class, ConfigObjectImpl.UseFilteringCategoriesScreen.class);
153153
InternalLogger.getInstance().info("Config loaded");
154154
saveConfig();
155+
FavoritesConfigManager.getInstance().syncFrom(this);
155156
}
156157

157-
private static Jankson buildJankson(Jankson.Builder builder) {
158+
public static Jankson buildJankson(Jankson.Builder builder) {
158159
// ResourceLocation
159160
builder.registerSerializer(ResourceLocation.class, (location, marshaller) -> {
160161
return new JsonPrimitive(location == null ? null : location.toString());
@@ -332,6 +333,7 @@ public void saveConfig() {
332333
return InteractionResult.PASS;
333334
});
334335
AutoConfig.getConfigHolder(ConfigObjectImpl.class).save();
336+
FavoritesConfigManager.getInstance().saveConfig();
335337
InternalLogger.getInstance().debug("Config saved");
336338
}
337339

runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -413,15 +413,15 @@ public List<FavoriteEntry> getFavoriteEntries() {
413413
}
414414

415415
public List<FavoriteEntry> getConfigFavoriteEntries() {
416-
return basics.favorites;
416+
return FavoritesConfigManager.getInstance().getConfig().favorites;
417417
}
418418

419419
public List<FavoriteEntry> getHiddenFavoriteEntries() {
420-
return basics.hiddenFavorites;
420+
return FavoritesConfigManager.getInstance().getConfig().hiddenFavorites;
421421
}
422422

423423
public List<CompoundTag> getDisplayHistory() {
424-
return basics.displayHistory;
424+
return FavoritesConfigManager.getInstance().getConfig().displays;
425425
}
426426

427427
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
/*
2+
* This file is licensed under the MIT License, part of Roughly Enough Items.
3+
* Copyright (c) 2018, 2019, 2020, 2021, 2022 shedaniel
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
* SOFTWARE.
22+
*/
23+
24+
package me.shedaniel.rei.impl.client.config;
25+
26+
import me.shedaniel.autoconfig.AutoConfig;
27+
import me.shedaniel.autoconfig.ConfigData;
28+
import me.shedaniel.autoconfig.annotation.Config;
29+
import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer;
30+
import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.Jankson;
31+
import me.shedaniel.rei.api.client.favorites.FavoriteEntry;
32+
import net.fabricmc.api.EnvType;
33+
import net.fabricmc.api.Environment;
34+
import net.minecraft.nbt.CompoundTag;
35+
import net.minecraft.world.InteractionResult;
36+
import org.jetbrains.annotations.ApiStatus;
37+
38+
import java.util.ArrayList;
39+
import java.util.List;
40+
41+
import static me.shedaniel.rei.impl.client.config.ConfigManagerImpl.buildJankson;
42+
43+
@ApiStatus.Internal
44+
public class FavoritesConfigManager {
45+
private static final FavoritesConfigManager INSTANCE = new FavoritesConfigManager();
46+
private FavoritesConfigObject object;
47+
48+
public FavoritesConfigManager() {
49+
AutoConfig.register(FavoritesConfigObject.class, (definition, configClass) -> new JanksonConfigSerializer<>(definition, configClass, buildJankson(Jankson.builder())));
50+
}
51+
52+
public static FavoritesConfigManager getInstance() {
53+
return INSTANCE;
54+
}
55+
56+
public void saveConfig() {
57+
AutoConfig.getConfigHolder(FavoritesConfigObject.class).registerLoadListener((configHolder, configObject) -> {
58+
object = configObject;
59+
return InteractionResult.PASS;
60+
});
61+
AutoConfig.getConfigHolder(FavoritesConfigObject.class).save();
62+
}
63+
64+
public FavoritesConfigObject getConfig() {
65+
if (object == null) {
66+
object = AutoConfig.getConfigHolder(FavoritesConfigObject.class).getConfig();
67+
}
68+
return object;
69+
}
70+
71+
public void syncFrom(ConfigManagerImpl manager) {
72+
ConfigObjectImpl.Basics basics = manager.getConfig().basics;
73+
FavoritesConfigObject config = this.getConfig();
74+
config.favorites.addAll(basics.favorites);
75+
config.hiddenFavorites.addAll(basics.hiddenFavorites);
76+
config.displays.addAll(basics.displayHistory);
77+
basics.favorites.clear();
78+
basics.hiddenFavorites.clear();
79+
basics.displayHistory.clear();
80+
manager.saveConfig();
81+
this.saveConfig();
82+
}
83+
84+
@Config(name = "roughlyenoughitems/favorites")
85+
@Environment(EnvType.CLIENT)
86+
public static final class FavoritesConfigObject implements ConfigData {
87+
public List<FavoriteEntry> favorites = new ArrayList<>();
88+
public List<FavoriteEntry> hiddenFavorites = new ArrayList<>();
89+
public List<CompoundTag> displays = new ArrayList<>();
90+
}
91+
}

0 commit comments

Comments
 (0)