aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUnknown <shekwancheung0528@gmail.com>2019-08-08 16:53:46 +0800
committerUnknown <shekwancheung0528@gmail.com>2019-08-08 16:53:46 +0800
commit10fa4cea1da644efe5b3045d3159a3eebdb8c0a8 (patch)
tree0e8f504b66391d6762d526c0e7cdd94c3cb6022f
parent6464acb0a7fe98ab30f9419e6aa95bdd1e92bc74 (diff)
downloadRoughlyEnoughItems-10fa4cea1da644efe5b3045d3159a3eebdb8c0a8.tar.gz
RoughlyEnoughItems-10fa4cea1da644efe5b3045d3159a3eebdb8c0a8.tar.bz2
RoughlyEnoughItems-10fa4cea1da644efe5b3045d3159a3eebdb8c0a8.zip
Using fiber as a config lib
-rwxr-xr-xbuild.gradle9
-rw-r--r--gradle.properties2
-rw-r--r--src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java4
-rw-r--r--src/main/java/me/shedaniel/rei/api/ConfigManager.java6
-rw-r--r--src/main/java/me/shedaniel/rei/api/ConfigObject.java89
-rw-r--r--src/main/java/me/shedaniel/rei/api/DisplayHelper.java2
-rw-r--r--src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java13
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java62
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigObject.java98
-rw-r--r--src/main/java/me/shedaniel/rei/client/ConfigObjectImpl.java307
-rw-r--r--src/main/java/me/shedaniel/rei/client/ScreenHelper.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java32
-rw-r--r--src/main/java/me/shedaniel/rei/gui/PreRecipeViewingScreen.java5
-rw-r--r--src/main/java/me/shedaniel/rei/gui/RecipeViewingScreen.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/VillagerRecipeViewingScreen.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ItemCheatingMode.java9
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/ItemListOrderingConfig.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/config/RecipeScreenType.java2
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/ItemListOverlay.java14
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeBaseWidget.java4
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/RecipeChoosePageWidget.java9
-rw-r--r--src/main/java/me/shedaniel/rei/gui/widget/SlotWidget.java13
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultAutoCraftingPlugin.java2
-rw-r--r--src/main/java/me/shedaniel/rei/plugin/DefaultPlugin.java17
-rw-r--r--src/main/java/me/shedaniel/rei/utils/ClothScreenRegistry.java177
-rwxr-xr-xsrc/main/resources/assets/roughlyenoughitems/lang/en_us.json95
26 files changed, 585 insertions, 396 deletions
diff --git a/build.gradle b/build.gradle
index b81eac073..2de509dfa 100755
--- a/build.gradle
+++ b/build.gradle
@@ -48,6 +48,10 @@ dependencies {
modImplementation("me.shedaniel.cloth:config-2:${cloth_config_version}") {
transitive = false
}
+ modApi ("me.shedaniel.cloth:fiber2cloth:1.0.1") {
+ transitive = false
+ }
+ modApi "me.zeroeightsix:fiber:0.6.0-7"
modApi "blue.endless:jankson:${project.jankson_version}"
if (includeDep) {
include("me.shedaniel.cloth:cloth-events:${cloth_events_version}") {
@@ -56,7 +60,10 @@ dependencies {
include("me.shedaniel.cloth:config-2:${cloth_config_version}") {
transitive = false
}
- include "blue.endless:jankson:${project.jankson_version}"
+ include ("me.shedaniel.cloth:fiber2cloth:1.0.1") {
+ transitive = false
+ }
+ include "me.zeroeightsix:fiber:0.6.0-7"
}
modImplementation "io.github.prospector.modmenu:ModMenu:${modmenu_version}"
compile "org.lwjgl:lwjgl-jemalloc:3.2.1"
diff --git a/gradle.properties b/gradle.properties
index c20ae71fd..343ce46fd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -4,6 +4,6 @@ yarn_version=1.14.3+build.1
fabricloader_version=0.4.8+build.155
jankson_version=1.1.0
cloth_events_version=0.4.0
-cloth_config_version=0.5.0
+cloth_config_version=0.5.2
modmenu_version=1.5.4-85
fabric_api=0.3.0+build.198
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
index 5a2a170c8..0f882570a 100644
--- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
+++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java
@@ -210,14 +210,14 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer {
return;
}
lastSync.set(System.currentTimeMillis());
- if (RoughlyEnoughItemsCore.getConfigManager().getConfig().registerRecipesInAnotherThread) {
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().doesRegisterRecipesInAnotherThread()) {
CompletableFuture.runAsync(() -> ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager), SYNC_RECIPES);
} else {
((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager);
}
});
ClothClientHooks.SCREEN_ADD_BUTTON.register((minecraftClient, screen, abstractButtonWidget) -> {
- if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && screen instanceof AbstractContainerScreen && abstractButtonWidget instanceof TexturedButtonWidget)
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().doesDisableRecipeBook() && screen instanceof AbstractContainerScreen && abstractButtonWidget instanceof TexturedButtonWidget)
if (((RecipeBookButtonWidgetHooks) abstractButtonWidget).rei_getTexture().equals(recipeButtonTex))
return ActionResult.FAIL;
return ActionResult.PASS;
diff --git a/src/main/java/me/shedaniel/rei/api/ConfigManager.java b/src/main/java/me/shedaniel/rei/api/ConfigManager.java
index 5f915dfff..e64d5df55 100644
--- a/src/main/java/me/shedaniel/rei/api/ConfigManager.java
+++ b/src/main/java/me/shedaniel/rei/api/ConfigManager.java
@@ -5,7 +5,7 @@
package me.shedaniel.rei.api;
-import me.shedaniel.rei.client.ConfigObject;
+import me.zeroeightsix.fiber.exception.FiberException;
import net.minecraft.client.gui.screen.Screen;
import java.io.IOException;
@@ -17,14 +17,14 @@ public interface ConfigManager {
*
* @throws IOException when error
*/
- void saveConfig() throws IOException;
+ void saveConfig() throws IOException, FiberException;
/**
* Loads the config from the json file, creates the file if not found.
*
* @throws IOException when error
*/
- void loadConfig() throws IOException;
+ void loadConfig() throws IOException, FiberException;
/**
* Gets the config instance
diff --git a/src/main/java/me/shedaniel/rei/api/ConfigObject.java b/src/main/java/me/shedaniel/rei/api/ConfigObject.java
new file mode 100644
index 000000000..de6911c96
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/api/ConfigObject.java
@@ -0,0 +1,89 @@
+package me.shedaniel.rei.api;
+
+import me.shedaniel.rei.gui.config.ItemCheatingMode;
+import me.shedaniel.rei.gui.config.ItemListOrdering;
+import me.shedaniel.rei.gui.config.RecipeScreenType;
+import me.zeroeightsix.fiber.tree.ConfigNode;
+
+public interface ConfigObject {
+
+ ConfigNode getConfigNode();
+
+ void setCheating(boolean cheating);
+
+ boolean isCheating();
+
+ ItemListOrdering getItemListOrdering();
+
+ boolean isItemListAscending();
+
+ boolean isUsingDarkTheme();
+
+ boolean shouldAppendModNames();
+
+ RecipeScreenType getRecipeScreenType();
+
+ void setRecipeScreenType(RecipeScreenType recipeScreenType);
+
+ boolean isLoadingDefaultPlugin();
+
+ boolean isSideSearchField();
+
+ boolean isLeftHandSidePanel();
+
+ boolean isCraftableFilterEnabled();
+
+ String getGamemodeCommand();
+
+ String getGiveCommand();
+
+ String getWeatherCommand();
+
+ int getMaxRecipePerPage();
+
+ boolean doesShowUtilsButtons();
+
+ boolean doesDisableRecipeBook();
+
+ boolean areClickableRecipeArrowsEnabled();
+
+ ItemCheatingMode getItemCheatingMode();
+
+ boolean isUsingLightGrayRecipeBorder();
+
+ boolean doesVillagerScreenHavePermanentScrollBar();
+
+ boolean doesRegisterRecipesInAnotherThread();
+
+ RelativePoint getChoosePageDialogPoint();
+
+ void setChoosePageDialogPoint(RelativePoint choosePageDialogPoint);
+
+ public static class RelativePoint {
+
+ private double relativeX, relativeY;
+
+ public RelativePoint(double relativeX, double relativeY) {
+ this.relativeX = relativeX;
+ this.relativeY = relativeY;
+ }
+
+ public double getRelativeX() {
+ return relativeX;
+ }
+
+ public double getRelativeY() {
+ return relativeY;
+ }
+
+ public double getX(double width) {
+ return width * relativeX;
+ }
+
+ public double getY(double height) {
+ return height * relativeY;
+ }
+
+ }
+
+}
diff --git a/src/main/java/me/shedaniel/rei/api/DisplayHelper.java b/src/main/java/me/shedaniel/rei/api/DisplayHelper.java
index 53d35a3dd..8b745f846 100644
--- a/src/main/java/me/shedaniel/rei/api/DisplayHelper.java
+++ b/src/main/java/me/shedaniel/rei/api/DisplayHelper.java
@@ -112,7 +112,7 @@ public interface DisplayHelper {
* @return the item list bounds
*/
default Rectangle getItemListArea(Rectangle rectangle) {
- return new Rectangle(rectangle.x + 2, rectangle.y + 24, rectangle.width - 4, rectangle.height - (RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField ? 27 + 22 : 27));
+ return new Rectangle(rectangle.x + 2, rectangle.y + 24, rectangle.width - 4, rectangle.height - (RoughlyEnoughItemsCore.getConfigManager().getConfig().isSideSearchField() ? 27 + 22 : 27));
}
/**
diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java
index b05f5d15e..700a0ab97 100644
--- a/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/client/ClientHelperImpl.java
@@ -18,6 +18,7 @@ import me.shedaniel.rei.gui.PreRecipeViewingScreen;
import me.shedaniel.rei.gui.RecipeViewingScreen;
import me.shedaniel.rei.gui.VillagerRecipeViewingScreen;
import me.shedaniel.rei.gui.config.RecipeScreenType;
+import me.zeroeightsix.fiber.exception.FiberException;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
@@ -124,15 +125,15 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
@Override
public boolean isCheating() {
- return RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating;
+ return RoughlyEnoughItemsCore.getConfigManager().getConfig().isCheating();
}
@Override
public void setCheating(boolean cheating) {
- RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating = cheating;
+ RoughlyEnoughItemsCore.getConfigManager().getConfig().setCheating(cheating);
try {
RoughlyEnoughItemsCore.getConfigManager().saveConfig();
- } catch (IOException e) {
+ } catch (IOException | FiberException e) {
e.printStackTrace();
}
}
@@ -158,7 +159,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
} else {
Identifier identifier = Registry.ITEM.getId(cheatedStack.getItem());
String tagMessage = cheatedStack.copy().getTag() != null && !cheatedStack.copy().getTag().isEmpty() ? cheatedStack.copy().getTag().asString() : "";
- String og = cheatedStack.getCount() == 1 ? RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand.replaceAll(" \\{count}", "") : RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand;
+ String og = cheatedStack.getCount() == 1 ? RoughlyEnoughItemsCore.getConfigManager().getConfig().getGiveCommand().replaceAll(" \\{count}", "") : RoughlyEnoughItemsCore.getConfigManager().getConfig().getGiveCommand();
String madeUpCommand = og.replaceAll("\\{player_name}", MinecraftClient.getInstance().player.getEntityName()).replaceAll("\\{item_name}", identifier.getPath()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", tagMessage).replaceAll("\\{count}", String.valueOf(cheatedStack.getCount()));
if (madeUpCommand.length() > 256) {
madeUpCommand = og.replaceAll("\\{player_name}", MinecraftClient.getInstance().player.getEntityName()).replaceAll("\\{item_name}", identifier.getPath()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", "").replaceAll("\\{count}", String.valueOf(cheatedStack.getCount()));
@@ -234,9 +235,9 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
@Override
public void openRecipeViewingScreen(Map<RecipeCategory<?>, List<RecipeDisplay>> map) {
- if (RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType == RecipeScreenType.VILLAGER)
+ if (RoughlyEnoughItemsCore.getConfigManager().getConfig().getRecipeScreenType() == RecipeScreenType.VILLAGER)
MinecraftClient.getInstance().openScreen(new VillagerRecipeViewingScreen(map));
- else if (RoughlyEnoughItemsCore.getConfigManager().getConfig().screenType == RecipeScreenType.UNSET)
+ else if (RoughlyEnoughItemsCore.getConfigManager().getConfig().getRecipeScreenType() == RecipeScreenType.UNSET)
MinecraftClient.getInstance().openScreen(new PreRecipeViewingScreen(map));
else
MinecraftClient.getInstance().openScreen(new RecipeViewingScreen(map));
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java b/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java
index 587eae8ce..fe0a23101 100644
--- a/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java
+++ b/src/main/java/me/shedaniel/rei/client/ConfigManagerImpl.java
@@ -5,12 +5,11 @@
package me.shedaniel.rei.client;
-import blue.endless.jankson.Jankson;
-import blue.endless.jankson.JsonObject;
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.api.ConfigManager;
+import me.shedaniel.rei.api.ConfigObject;
+import me.zeroeightsix.fiber.JanksonSettings;
+import me.zeroeightsix.fiber.exception.FiberException;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
@@ -18,98 +17,65 @@ import net.minecraft.client.resource.language.I18n;
import net.minecraft.text.LiteralText;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
import java.util.List;
public class ConfigManagerImpl implements ConfigManager {
- private static final Gson GSON = new GsonBuilder().create();
- private static final Jankson JANKSON = Jankson.builder().build();
- private final File configFile, veryOldConfigFile, oldConfigFile;
+ private final File configFile;
private ConfigObject config;
private boolean craftableOnly;
public ConfigManagerImpl() {
- this.veryOldConfigFile = new File(FabricLoader.getInstance().getConfigDirectory(), "rei.json");
- this.oldConfigFile = new File(FabricLoader.getInstance().getConfigDirectory(), "roughlyenoughitems/config.json");
this.configFile = new File(FabricLoader.getInstance().getConfigDirectory(), "roughlyenoughitems/config.json5");
this.craftableOnly = false;
try {
loadConfig();
RoughlyEnoughItemsCore.LOGGER.info("[REI] Config is loaded.");
- } catch (IOException e) {
+ } catch (IOException | FiberException e) {
e.printStackTrace();
}
}
@Override
- public void saveConfig() throws IOException {
+ public void saveConfig() throws IOException, FiberException {
configFile.getParentFile().mkdirs();
if (!configFile.exists() && !configFile.createNewFile()) {
RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to save config! Overwriting with default config.");
- config = new ConfigObject();
+ config = new ConfigObjectImpl();
return;
}
try {
- String result = JANKSON.toJson(config).toJson(true, true, 0);
- if (!configFile.exists())
- configFile.createNewFile();
- FileOutputStream out = new FileOutputStream(configFile, false);
-
- out.write(result.getBytes());
- out.flush();
- out.close();
+ new JanksonSettings().serialize(config.getConfigNode(), Files.newOutputStream(configFile.toPath()), false);
} catch (Exception e) {
e.printStackTrace();
RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to save config! Overwriting with default config.");
- config = new ConfigObject();
+ config = new ConfigObjectImpl();
return;
}
}
@Override
- public void loadConfig() throws IOException {
+ public void loadConfig() throws IOException, FiberException {
configFile.getParentFile().mkdirs();
- if (!configFile.exists() && veryOldConfigFile.exists()) {
- RoughlyEnoughItemsCore.LOGGER.info("[REI] Detected old config file, trying to move it.");
- try {
- Files.move(veryOldConfigFile.toPath(), configFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- } catch (Exception e) {
- e.printStackTrace();
- RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to move config file.");
- }
- }
- if (!configFile.exists() && oldConfigFile.exists()) {
- RoughlyEnoughItemsCore.LOGGER.info("[REI] Detected old config file, trying to move it.");
- try {
- Files.move(oldConfigFile.toPath(), configFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- } catch (Exception e) {
- e.printStackTrace();
- RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to move config file.");
- }
- }
if (!configFile.exists() || !configFile.canRead()) {
RoughlyEnoughItemsCore.LOGGER.warn("[REI] Config not found! Creating one.");
- config = new ConfigObject();
+ config = new ConfigObjectImpl();
saveConfig();
return;
}
boolean failed = false;
try {
- JsonObject configJson = JANKSON.load(configFile);
- String regularized = configJson.toJson(false, false, 0);
-
- config = GSON.fromJson(regularized, ConfigObject.class);
+ config = new ConfigObjectImpl();
+ new JanksonSettings().deserialize(config.getConfigNode(), Files.newInputStream(configFile.toPath()));
} catch (Exception e) {
e.printStackTrace();
failed = true;
}
if (failed || config == null) {
RoughlyEnoughItemsCore.LOGGER.error("[REI] Failed to load config! Overwriting with default config.");
- config = new ConfigObject();
+ config = new ConfigObjectImpl();
}
saveConfig();
}
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObject.java b/src/main/java/me/shedaniel/rei/client/ConfigObject.java
deleted file mode 100644
index 5363e672c..000000000
--- a/src/main/java/me/shedaniel/rei/client/ConfigObject.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Roughly Enough Items by Danielshe.
- * Licensed under the MIT License.
- */
-
-package me.shedaniel.rei.client;
-
-import blue.endless.jankson.Comment;
-import me.shedaniel.rei.gui.config.ItemCheatingMode;
-import me.shedaniel.rei.gui.config.ItemListOrdering;
-import me.shedaniel.rei.gui.config.RecipeScreenType;
-
-public class ConfigObject {
-
- public boolean cheating = false;
-
- @Comment("The ordering of the items on the item panel.")
- public ItemListOrdering itemListOrdering = ItemListOrdering.registry;
-
- @Comment("The ordering of the items on the item panel.")
- public boolean isAscending = true;
-
- @Comment("To toggle the craftable button next to the search field.")
- public boolean enableCraftableOnlyButton = false;
-
- @Comment("True: search field will be on the side (left / right), false: in the middle")
- public boolean sideSearchField = false;
-
- @Comment("The command used in servers to cheat items")
- public String giveCommand = "/minecraft:give {player_name} {item_identifier}{nbt} {count}";
-
- @Comment("The command used to change gamemode")
- public String gamemodeCommand = "/gamemode {gamemode}";
-
- @Comment("The command used to change weather")
- public String weatherCommand = "/weather {weather}";
-
- @Comment("True: item panel on the left, false: on the right")
- public boolean mirrorItemPanel = false;
-
- @Comment("To disable REI's default plugin, don't change this unless you understand what you are doing")
- public boolean loadDefaultPlugin = true;
-
- @Comment("Maximum recipes viewed at one time.")
- public int maxRecipePerPage = 3;
-
- @Comment("Toggle utils buttons")
- public boolean showUtilsButtons = false;
-
- @Comment("Disable Recipe Book")
- public boolean disableRecipeBook = false;
-
- public boolean clickableRecipeArrows = true;
-
- public ItemCheatingMode itemCheatingMode = ItemCheatingMode.REI_LIKE;
-
- public boolean lightGrayRecipeBorder = false;
-
- public boolean villagerScreenPermanentScrollBar = false;
-
- public boolean darkTheme = false;
-
- public boolean registerRecipesInAnotherThread = true;
-
- public RecipeScreenType screenType = RecipeScreenType.UNSET;
-
- @Comment(
- "The location of choose page dialog, will automatically be set to your last location so there is no need to change this.")
- public RelativePoint choosePageDialogPoint = new RelativePoint(.5, .5);
-
- public static class RelativePoint {
-
- private double relativeX, relativeY;
-
- public RelativePoint(double relativeX, double relativeY) {
- this.relativeX = relativeX;
- this.relativeY = relativeY;
- }
-
- public double getRelativeX() {
- return relativeX;
- }
-
- public double getRelativeY() {
- return relativeY;
- }
-
- public double getX(double width) {
- return width * relativeX;
- }
-
- public double getY(double height) {
- return height * relativeY;
- }
-
- }
-
-}
diff --git a/src/main/java/me/shedaniel/rei/client/ConfigObjectImpl.java b/src/main/java/me/shedaniel/rei/client/ConfigObjectImpl.java
new file mode 100644
index 000000000..8fac22090
--- /dev/null
+++ b/src/main/java/me/shedaniel/rei/client/ConfigObjectImpl.java
@@ -0,0 +1,307 @@
+/*
+ * Roughly Enough Items by Danielshe.
+ * Licensed under the MIT License.
+ */
+
+package me.shedaniel.rei.client;
+
+import me.shedaniel.rei.api.ConfigObject;
+import me.shedaniel.rei.gui.config.ItemCheatingMode;
+import me.shedaniel.rei.gui.config.ItemListOrdering;
+import me.shedaniel.rei.gui.config.ItemListOrderingConfig;
+import me.shedaniel.rei.gui.config.RecipeScreenType;
+import me.zeroeightsix.fiber.exception.FiberException;
+import me.zeroeightsix.fiber.tree.ConfigNode;
+import me.zeroeightsix.fiber.tree.ConfigValue;
+import me.zeroeightsix.fiber.tree.Node;
+
+public class ConfigObjectImpl implements ConfigObject {
+
+ public ConfigNode configNode = new ConfigNode();
+
+ private Node general = configNode.fork("!general");
+ private Node appearance = configNode.fork("appearance");
+ private Node modules = configNode.fork("modules");
+ private Node technical = configNode.fork("technical");
+
+ private ConfigValue<Boolean> cheating = ConfigValue.builder(Boolean.class)
+ .withParent(general)
+ .withDefaultValue(false)
+ .withComment("Declares whether cheating mode is on.")
+ .withName("cheating")
+ .build();
+
+ private ConfigValue<ItemListOrderingConfig> itemListOrdering = ConfigValue.builder(ItemListOrderingConfig.class)
+ .withParent(appearance)
+ .withDefaultValue(ItemListOrderingConfig.REGISTRY_ASCENDING)
+ .withComment("The ordering of the items on the item panel.")
+ .withName("itemListOrdering")
+ .build();
+
+ private ConfigValue<Boolean> darkTheme = ConfigValue.builder(Boolean.class)
+ .withParent(appearance)
+ .withDefaultValue(false)
+ .withComment("Declares the appearance of REI windows.")
+ .withName("darkTheme")
+ .build();
+
+ private ConfigValue<RecipeScreenType> recipeScreenType = ConfigValue.builder(RecipeScreenType.class)
+ .withParent(appearance)
+ .withDefaultValue(RecipeScreenType.UNSET)
+ .withComment("The ordering of the items on the item panel.")
+ .withName("recipeScreenType")
+ .build();
+
+ private ConfigValue<Boolean> loadDefaultPlugin = ConfigValue.builder(Boolean.class)
+ .withParent(technical)
+ .withDefaultValue(true)
+ .withComment("To disable REI's default plugin.\nDon't change this unless you understand what you are doing")
+ .withName("loadDefaultPlugin")
+ .build();
+
+ private ConfigValue<Boolean> sideSearchField = ConfigValue.builder(Boolean.class)
+ .withParent(appearance)
+ .withDefaultValue(false)
+ .withComment("Declares the position of the search field.")
+ .withName("sideSearchField")
+ .build();
+
+ private ConfigValue<Boolean> mirrorItemPanel = ConfigValue.builder(Boolean.class)
+ .withParent(appearance)
+ .withDefaultValue(false)
+ .withComment("Declares the position of the item list panel.")
+ .withName("mirrorItemPanel")
+ .build();
+
+ private ConfigValue<Boolean> enableCraftableOnlyButton = ConfigValue.builder(Boolean.class)
+ .withParent(modules)
+ .withDefaultValue(true)
+ .withComment("Declares whether the craftable filter button is enabled.")
+ .withName("enableCraftableOnlyButton")
+ .build();
+
+ private ConfigValue<String> gamemodeCommand = ConfigValue.builder(String.class)
+ .withParent(technical)
+ .withDefaultValue("/gamemode {gamemode}")
+ .withComment("Declares the command used to change gamemode.")
+ .withName("gamemodeCommand")
+ .build();
+
+ private ConfigValue<String> giveCommand = ConfigValue.builder(String.class)
+ .withParent(technical)
+ .withDefaultValue("/give {player_name} {item_identifier}{nbt} {count}")
+ .withComment("Declares the command used in servers to cheat items.")
+ .withName("giveCommand")
+ .build();
+
+ private ConfigValue<String> weatherCommand = ConfigValue.builder(String.class)
+ .withParent(technical)
+ .withDefaultValue("/weather {weather}")
+ .withComment("Declares the command used to change weather.")
+ .withName("weatherCommand")
+ .build();
+
+ private ConfigValue<Integer> maxRecipePerPage = ConfigValue.builder(Integer.class)
+ .withParent(appearance)
+ .withDefaultValue(3)
+ .withComment("Declares the maximum amount of recipes displayed in a page if possible.")
+ .withName("maxRecipePerPage")
+ .constraints()
+ .minNumerical(2)
+ .maxNumerical(99)
+ .finish()
+ .build();
+
+ private ConfigValue<Boolean> showUtilsButtons = ConfigValue.builder(Boolean.class)
+ .withParent(modules)
+ .withDefaultValue(false)
+ .withComment("Declares whether the utils buttons are shown.")
+ .withName("showUtilsButtons")
+ .build();
+
+ private ConfigValue<Boolean> disableRecipeBook = ConfigValue.builder(Boolean.class)
+ .withParent(modules)
+ .withDefaultValue(false)
+ .withComment("Declares whether REI should remove the recipe book.")
+ .withName("disableRecipeBook")
+ .build();
+
+ private ConfigValue<Boolean> clickableRecipeArrows = ConfigValue.builder(Boolean.class)
+ .withParent(appearance)
+ .withDefaultValue(true)
+ .withName("clickableRecipeArrows")
+ .build();
+
+ private ConfigValue<ItemCheatingMode> itemCheatingMode = ConfigValue.builder(ItemCheatingMode.class)
+ .withParent(appearance)
+ .withDefaultValue(ItemCheatingMode.REI_LIKE)
+ .withName("itemCheatingMode")
+ .build();
+
+ private ConfigValue<Boolean> lightGrayRecipeBorder = ConfigValue.builder(Boolean.class)
+ .withParent(appearance)
+ .withDefaultValue(false)
+ .withComment("Declares the appearance of recipe's border.")
+ .withName("lightGrayRecipeBorder")
+ .build();
+
+ private ConfigValue<Boolean> appendModNames = ConfigValue.builder(B