diff options
| author | shedaniel <daniel@shedaniel.me> | 2019-12-10 23:31:09 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2019-12-10 23:31:09 +0800 |
| commit | 977350c12271246c2f220761fb33d58bab872357 (patch) | |
| tree | 4de8f3bf4186d532fc9cb3ef130c1e63fff27bd3 /src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java | |
| parent | 1b055888a74e68f5a287068428dc80196558fc98 (diff) | |
| download | RoughlyEnoughItems-977350c12271246c2f220761fb33d58bab872357.tar.gz RoughlyEnoughItems-977350c12271246c2f220761fb33d58bab872357.tar.bz2 RoughlyEnoughItems-977350c12271246c2f220761fb33d58bab872357.zip | |
Semi working favorites
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java')
| -rw-r--r-- | src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java index 9271785e0..a5f06e8d2 100644 --- a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java @@ -5,26 +5,35 @@ package me.shedaniel.rei.impl; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; import me.sargunvohra.mcmods.autoconfig1u.gui.ConfigScreenProvider; import me.sargunvohra.mcmods.autoconfig1u.gui.registry.GuiRegistry; import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer; +import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Jankson; +import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.JsonPrimitive; import me.shedaniel.cloth.hooks.ScreenHooks; +import me.shedaniel.clothconfig2.api.AbstractConfigListEntry; import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry; import me.shedaniel.rei.RoughlyEnoughItemsCore; -import me.shedaniel.rei.api.ConfigManager; -import me.shedaniel.rei.api.ConfigObject; -import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.api.*; import me.shedaniel.rei.api.annotations.Internal; import me.shedaniel.rei.gui.ConfigReloadingScreen; +import me.shedaniel.rei.gui.ContainerScreenOverlay; import me.shedaniel.rei.gui.credits.CreditsScreen; import me.shedaniel.rei.gui.widget.ReloadConfigButtonWidget; +import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.AbstractPressableButtonWidget; import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.InputUtil; import net.minecraft.text.LiteralText; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -36,10 +45,18 @@ import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.setUnsafely; public class ConfigManagerImpl implements ConfigManager { private boolean craftableOnly; + private List<EntryStack> favorites = new ArrayList<>(); public ConfigManagerImpl() { this.craftableOnly = false; - AutoConfig.register(ConfigObjectImpl.class, JanksonConfigSerializer::new); + AutoConfig.register(ConfigObjectImpl.class, (definition, configClass) -> { + return new JanksonConfigSerializer<ConfigObjectImpl>(definition, configClass, Jankson.builder() + .registerPrimitiveTypeAdapter(InputUtil.KeyCode.class, it -> { + return it instanceof String ? InputUtil.fromName((String) it) : null; + }) + .registerSerializer(InputUtil.KeyCode.class, (it, marshaller) -> new JsonPrimitive(it.getName())) + .build()); + }); GuiRegistry guiRegistry = AutoConfig.getGuiRegistry(ConfigObjectImpl.class); //noinspection rawtypes guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> Collections.singletonList( @@ -48,11 +65,48 @@ public class ConfigManagerImpl implements ConfigManager { .setSaveConsumer(newValue -> setUnsafely(field, config, newValue)) .build() ), field -> field.getType().isEnum(), ConfigObject.UseEnumSelectorInstead.class); + loadFavoredEntries(); + guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> { + @SuppressWarnings("rawtypes") List<AbstractConfigListEntry> entries = new ArrayList<>(); + for (FabricKeyBinding binding : ClientHelper.getInstance().getREIKeyBindings()) { + entries.add(ConfigEntryBuilder.create().fillKeybindingField(I18n.translate(binding.getId()) + ":", binding).build()); + } + KeyCodeEntry entry = ConfigEntryBuilder.create().startKeyCodeField(i13n, getUnsafely(field, config, null)) + .setDefaultValue(() -> getUnsafely(field, defaults)) + .setSaveConsumer(newValue -> setUnsafely(field, config, newValue)) + .build(); + entry.setAllowMouse(false); + entries.add(entry); + return entries; + }, field -> field.getType() == InputUtil.KeyCode.class, ConfigObject.AddInFrontKeyCode.class); + loadFavoredEntries(); RoughlyEnoughItemsCore.LOGGER.info("[REI] Config is loaded."); } @Override + public List<EntryStack> getFavorites() { + return favorites; + } + + public void loadFavoredEntries() { + favorites.clear(); + Gson gson = new GsonBuilder().create(); + for (String entry : ((ConfigObjectImpl) getConfig()).general.favorites) { + EntryStack stack = EntryStack.readFromJson(gson.fromJson(entry, JsonElement.class)); + if (!stack.isEmpty()) favorites.add(stack); + } + saveConfig(); + } + + @Override public void saveConfig() { + Gson gson = new GsonBuilder().create(); + ConfigObjectImpl object = (ConfigObjectImpl) getConfig(); + object.general.favorites.clear(); + for (EntryStack stack : favorites) { + JsonElement element = stack.toJson(); + if (element != null) object.general.favorites.add(gson.toJson(element)); + } ((me.sargunvohra.mcmods.autoconfig1u.ConfigManager<ConfigObjectImpl>) AutoConfig.getConfigHolder(ConfigObjectImpl.class)).save(); } @@ -103,6 +157,9 @@ public class ConfigManagerImpl implements ConfigManager { MinecraftClient.getInstance().openScreen(new CreditsScreen(screen)); } }); + }).setSavingRunnable(() -> { + saveConfig(); + ContainerScreenOverlay.getEntryListWidget().updateSearch(ScreenHelper.getSearchField().getText()); }).build(); }); return provider.get(); |
