aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/rei/impl
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-01-02 14:31:16 +0800
committershedaniel <daniel@shedaniel.me>2020-01-02 14:31:16 +0800
commit5e2eccadbd91171c01cdb209d1338bcfb7786b1c (patch)
tree6c7387de5baea8b335e8abe58651018f77ad2d41 /src/main/java/me/shedaniel/rei/impl
parente8714fe8fc1dcaec7ad299c63e2b657870c8fb40 (diff)
downloadRoughlyEnoughItems-5e2eccadbd91171c01cdb209d1338bcfb7786b1c.tar.gz
RoughlyEnoughItems-5e2eccadbd91171c01cdb209d1338bcfb7786b1c.tar.bz2
RoughlyEnoughItems-5e2eccadbd91171c01cdb209d1338bcfb7786b1c.zip
3.3
Fix #58 Close #134 Close #158 Fix #227
Diffstat (limited to 'src/main/java/me/shedaniel/rei/impl')
-rw-r--r--src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java18
-rw-r--r--src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java30
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java135
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java99
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java260
-rw-r--r--src/main/java/me/shedaniel/rei/impl/DisplayHelperImpl.java32
-rw-r--r--src/main/java/me/shedaniel/rei/impl/EmptyEntryStack.java55
-rw-r--r--src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java32
-rw-r--r--src/main/java/me/shedaniel/rei/impl/FluidEntryStack.java44
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ItemEntryStack.java146
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ObjectHolderImpl.java4
-rw-r--r--src/main/java/me/shedaniel/rei/impl/RecipeHelperImpl.java119
-rw-r--r--src/main/java/me/shedaniel/rei/impl/ScreenHelper.java43
-rw-r--r--src/main/java/me/shedaniel/rei/impl/SearchArgument.java39
-rw-r--r--src/main/java/me/shedaniel/rei/impl/Weather.java14
15 files changed, 543 insertions, 527 deletions
diff --git a/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java b/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
index fefe011c0..cdbbfdccd 100644
--- a/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
+++ b/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
@@ -15,29 +15,29 @@ import java.util.Map;
@Deprecated
public abstract class AbstractEntryStack extends DrawableHelper implements EntryStack {
private Map<Settings, Object> settings = new HashMap<>();
-
+
@Override
public <T> EntryStack setting(Settings<T> settings, T value) {
this.settings.put(settings, value);
return this;
}
-
+
@Override
public <T> EntryStack removeSetting(Settings<T> settings) {
this.settings.remove(settings);
return this;
}
-
+
@Override
public EntryStack clearSettings() {
this.settings.clear();
return this;
}
-
+
protected Map<Settings, Object> getSettings() {
return settings;
}
-
+
@Override
public <T> ObjectHolder<T> getSetting(Settings<T> settings) {
Object o = this.settings.get(settings);
@@ -45,7 +45,7 @@ public abstract class AbstractEntryStack extends DrawableHelper implements Entry
return ObjectHolder.of(settings.getDefaultValue());
return ObjectHolder.of((T) o);
}
-
+
@Override
public boolean equals(EntryStack stack, boolean ignoreTags, boolean ignoreAmount) {
if (ignoreTags && ignoreAmount)
@@ -56,7 +56,7 @@ public abstract class AbstractEntryStack extends DrawableHelper implements Entry
return equalsIgnoreTags(stack);
return equalsAll(stack);
}
-
+
@Override
public boolean equals(Object obj) {
if (!(obj instanceof EntryStack))
@@ -65,12 +65,12 @@ public abstract class AbstractEntryStack extends DrawableHelper implements Entry
boolean checkTags = getSetting(Settings.CHECK_TAGS).value().get() || stack.getSetting(Settings.CHECK_TAGS).value().get();
return equals(stack, !checkTags, true);
}
-
+
@Override
public int getZ() {
return getBlitOffset();
}
-
+
@Override
public void setZ(int z) {
setBlitOffset(z);
diff --git a/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java b/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java
index 54a4813f0..ae4cb24df 100644
--- a/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/BaseBoundsHandlerImpl.java
@@ -22,32 +22,32 @@ import java.util.function.Supplier;
@Deprecated
@Internal
public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
-
+
private static final Comparator<? super Rectangle> RECTANGLE_COMPARER = Comparator.comparingLong(Rectangle::hashCode);
-
+
private long lastArea = -1;
private List<Pair<Pair<Class<?>, Float>, Supplier<List<Rectangle>>>> list = Lists.newArrayList();
-
+
@Override
public Class<?> getBaseSupportedClass() {
return Screen.class;
}
-
+
@Override
public Rectangle getLeftBounds(Screen screen) {
return new Rectangle();
}
-
+
@Override
public Rectangle getRightBounds(Screen screen) {
return new Rectangle();
}
-
+
@Override
public float getPriority() {
return -5f;
}
-
+
@Override
public ActionResult isInZone(double mouseX, double mouseY) {
Class<? extends Screen> screenClass = MinecraftClient.getInstance().currentScreen.getClass();
@@ -59,7 +59,7 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
}
return ActionResult.PASS;
}
-
+
@Override
public boolean shouldRecalculateArea(boolean isOnRightSide, Rectangle rectangle) {
long current = currentHashCode(isOnRightSide);
@@ -68,12 +68,12 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
lastArea = current;
return true;
}
-
+
private long currentHashCode(boolean isOnRightSide) {
DisplayHelper.DisplayBoundsHandler handler = DisplayHelper.getInstance().getResponsibleBoundsHandler(MinecraftClient.getInstance().currentScreen.getClass());
return areasHashCode(isOnRightSide ? handler.getRightBounds(MinecraftClient.getInstance().currentScreen) : handler.getLeftBounds(MinecraftClient.getInstance().currentScreen), getExclusionZones(MinecraftClient.getInstance().currentScreen.getClass(), false));
}
-
+
@Override
public ActionResult canItemSlotWidgetFit(int left, int top, Screen screen, Rectangle fullBounds) {
Class<? extends Screen> screenClass = screen.getClass();
@@ -86,7 +86,7 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
}
return ActionResult.PASS;
}
-
+
@Override
public List<Rectangle> getExclusionZones(Class<?> currentScreenClass, boolean sort) {
List<Rectangle> rectangles = Lists.newArrayList();
@@ -98,22 +98,22 @@ public class BaseBoundsHandlerImpl implements BaseBoundsHandler {
rectangles.sort(RECTANGLE_COMPARER);
return rectangles;
}
-
+
@Override
public int supplierSize() {
return list.size();
}
-
+
@Override
public void registerExclusionZones(Class<?> screenClass, Supplier<List<Rectangle>> supplier) {
list.add(new Pair<>(new Pair<>(screenClass, 0f), supplier));
}
-
+
private long areasHashCode(Rectangle rectangle, List<Rectangle> exclusionZones) {
int hashCode = 31 + (rectangle == null ? 0 : rectangle.hashCode());
for (Rectangle e : exclusionZones)
hashCode = 31 * hashCode + (e == null ? 0 : e.hashCode());
return hashCode;
}
-
+
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index 1eac3474e..1645c63c7 100644
--- a/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -8,6 +8,8 @@ package me.shedaniel.rei.impl;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import io.netty.buffer.Unpooled;
+import me.shedaniel.clothconfig2.api.FakeModifierKeyCodeAdder;
+import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
import me.shedaniel.rei.RoughlyEnoughItemsNetwork;
import me.shedaniel.rei.api.*;
@@ -17,7 +19,6 @@ import me.shedaniel.rei.gui.RecipeViewingScreen;
import me.shedaniel.rei.gui.VillagerRecipeViewingScreen;
import me.shedaniel.rei.gui.config.RecipeScreenType;
import net.fabricmc.api.ClientModInitializer;
-import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding;
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl;
import net.fabricmc.loader.api.FabricLoader;
@@ -26,7 +27,6 @@ import net.fabricmc.loader.api.metadata.ModMetadata;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
-import net.minecraft.client.util.InputUtil;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
@@ -37,6 +37,7 @@ import net.minecraft.util.Identifier;
import net.minecraft.util.PacketByteBuf;
import net.minecraft.util.registry.Registry;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -45,19 +46,10 @@ import java.util.Optional;
@Deprecated
@Internal
public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
-
+
public static ClientHelperImpl instance;
- private final Identifier recipeKeybind = new Identifier("roughlyenoughitems", "recipe_keybind");
- private final Identifier usageKeybind = new Identifier("roughlyenoughitems", "usage_keybind");
- private final Identifier hideKeybind = new Identifier("roughlyenoughitems", "hide_keybind");
- private final Identifier previousPageKeybind = new Identifier("roughlyenoughitems", "previous_page");
- private final Identifier nextPageKeybind = new Identifier("roughlyenoughitems", "next_page");
- private final Identifier focusSearchFieldKeybind = new Identifier("roughlyenoughitems", "focus_search");
- private final Identifier copyRecipeIdentifierKeybind = new Identifier("roughlyenoughitems", "copy_recipe_id");
- private final Identifier favoriteEntryKeybind = new Identifier("roughlyenoughitems", "favorite_entry");
private final Map<String, String> modNameCache = Maps.newHashMap();
- public FabricKeyBinding recipe, usage, hide, previousPage, nextPage, focusSearchField, copyRecipeIdentifier;
-
+
@Override
public String getFormattedModFromItem(Item item) {
String mod = getModFromItem(item);
@@ -65,7 +57,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
return "";
return Formatting.BLUE.toString() + Formatting.ITALIC.toString() + mod;
}
-
+
@Override
public String getFormattedModFromIdentifier(Identifier identifier) {
String mod = getModFromIdentifier(identifier);
@@ -73,54 +65,14 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
return "";
return Formatting.BLUE.toString() + Formatting.ITALIC.toString() + mod;
}
-
- @Override
- public FabricKeyBinding[] getREIKeyBindings() {
- return new FabricKeyBinding[]{recipe, usage, hide, previousPage, nextPage, focusSearchField, copyRecipeIdentifier};
- }
-
- @Override
- public FabricKeyBinding getRecipeKeyBinding() {
- return recipe;
- }
-
- @Override
- public FabricKeyBinding getUsageKeyBinding() {
- return usage;
- }
-
- @Override
- public FabricKeyBinding getHideKeyBinding() {
- return hide;
- }
-
- @Override
- public FabricKeyBinding getPreviousPageKeyBinding() {
- return previousPage;
- }
-
- @Override
- public FabricKeyBinding getNextPageKeyBinding() {
- return nextPage;
- }
-
- @Override
- public FabricKeyBinding getFocusSearchFieldKeyBinding() {
- return focusSearchField;
- }
-
- @Override
- public FabricKeyBinding getCopyRecipeIdentifierKeyBinding() {
- return copyRecipeIdentifier;
- }
-
+
@Override
public String getModFromItem(Item item) {
if (item.equals(Items.AIR))
return "";
return getModFromIdentifier(Registry.ITEM.getId(item));
}
-
+
@Override
public String getModFromIdentifier(Identifier identifier) {
if (identifier == null)
@@ -133,18 +85,18 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
modNameCache.put(modid, s);
return s;
}
-
+
@Override
public boolean isCheating() {
return ConfigObject.getInstance().isCheating();
}
-
+
@Override
public void setCheating(boolean cheating) {
ConfigObject.getInstance().setCheating(cheating);
ConfigManager.getInstance().saveConfig();
}
-
+
@Override
public void sendDeletePacket() {
if (ScreenHelper.getLastContainerScreen() instanceof CreativeInventoryScreen) {
@@ -153,7 +105,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
}
ClientSidePacketRegistry.INSTANCE.sendToServer(RoughlyEnoughItemsNetwork.DELETE_ITEMS_PACKET, new PacketByteBuf(Unpooled.buffer()));
}
-
+
@Override
public boolean tryCheatingEntry(EntryStack entry) {
if (entry.getType() != EntryStack.Type.ITEM)
@@ -181,7 +133,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
return true;
}
}
-
+
@Override
public boolean executeRecipeKeyBind(EntryStack stack) {
Map<RecipeCategory<?>, List<RecipeDisplay>> map = RecipeHelper.getInstance().getRecipesFor(stack);
@@ -189,7 +141,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
openRecipeViewingScreen(map);
return map.keySet().size() > 0;
}
-
+
@Override
public boolean executeUsageKeyBind(EntryStack stack) {
Map<RecipeCategory<?>, List<RecipeDisplay>> map = RecipeHelper.getInstance().getUsagesFor(stack);
@@ -197,7 +149,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
openRecipeViewingScreen(map);
return map.keySet().size() > 0;
}
-
+
@Override
public List<ItemStack> getInventoryItemsTypes() {
List<DefaultedList<ItemStack>> field_7543 = ImmutableList.of(MinecraftClient.getInstance().player.inventory.main, MinecraftClient.getInstance().player.inventory.armor, MinecraftClient.getInstance().player.inventory.offHand);
@@ -208,7 +160,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
}));
return inventoryStacks;
}
-
+
@Override
public boolean executeViewAllRecipesKeyBind() {
Map<RecipeCategory<?>, List<RecipeDisplay>> map = RecipeHelper.getInstance().getAllRecipes();
@@ -216,7 +168,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
openRecipeViewingScreen(map);
return map.keySet().size() > 0;
}
-
+
@Override
public boolean executeViewAllRecipesFromCategory(Identifier category) {
Map<RecipeCategory<?>, List<RecipeDisplay>> map = Maps.newLinkedHashMap();
@@ -229,7 +181,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
openRecipeViewingScreen(map);
return map.keySet().size() > 0;
}
-
+
@Override
public boolean executeViewAllRecipesFromCategories(List<Identifier> categories) {
Map<RecipeCategory<?>, List<RecipeDisplay>> map = Maps.newLinkedHashMap();
@@ -244,7 +196,7 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
openRecipeViewingScreen(map);
return map.keySet().size() > 0;
}
-
+
@Override
public void openRecipeViewingScreen(Map<RecipeCategory<?>, List<RecipeDisplay>> map) {
Screen screen = null;
@@ -257,26 +209,51 @@ public class ClientHelperImpl implements ClientHelper, ClientModInitializer {
ScreenHelper.storeRecipeScreen(MinecraftClient.getInstance().currentScreen);
MinecraftClient.getInstance().openScreen(screen);
}
-
+
@Override
public void onInitializeClient() {
- ClientHelperImpl.instance = (ClientHelperImpl) this;
+ ClientHelperImpl.instance = this;
registerFabricKeyBinds();
modNameCache.put("minecraft", "Minecraft");
modNameCache.put("c", "Common");
}
-
+
@Override
public void registerFabricKeyBinds() {
String category = "key.rei.category";
- KeyBindingRegistryImpl.INSTANCE.addCategory(category);
- KeyBindingRegistryImpl.INSTANCE.register(recipe = FabricKeyBinding.Builder.create(recipeKeybind, InputUtil.Type.KEYSYM, 82, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(usage = FabricKeyBinding.Builder.create(usageKeybind, InputUtil.Type.KEYSYM, 85, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(hide = FabricKeyBinding.Builder.create(hideKeybind, InputUtil.Type.KEYSYM, 79, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(previousPage = FabricKeyBinding.Builder.create(previousPageKeybind, InputUtil.Type.KEYSYM, -1, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(nextPage = FabricKeyBinding.Builder.create(nextPageKeybind, InputUtil.Type.KEYSYM, -1, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(focusSearchField = FabricKeyBinding.Builder.create(focusSearchFieldKeybind, InputUtil.Type.KEYSYM, -1, category).build());
- KeyBindingRegistryImpl.INSTANCE.register(copyRecipeIdentifier = FabricKeyBinding.Builder.create(copyRecipeIdentifierKeybind, InputUtil.Type.KEYSYM, -1, category).build());
+ if (!FabricLoader.getInstance().isModLoaded("amecs")) {
+ try {
+ ConfigObjectImpl.General general = ConfigObject.getInstance().getGeneral();
+ ConfigObjectImpl.General instance = general.getClass().newInstance();
+ for (Field declaredField : general.getClass().getDeclaredFields()) {
+ if (declaredField.getType() == ModifierKeyCode.class) {
+ declaredField.setAccessible(true);
+ FakeModifierKeyCodeAdder.INSTANCE.registerModifierKeyCode(category, "config.roughlyenoughitems." + declaredField.getName(), () -> {
+ try {
+ return (ModifierKeyCode) declaredField.get(general);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }, () -> {
+ try {
+ return (ModifierKeyCode) declaredField.get(instance);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ }, keyCode -> {
+ try {
+ declaredField.set(general, keyCode);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+ }
+ KeyBindingRegistryImpl.INSTANCE.addCategory(category);
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ }
}
-
+
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
index 217c356f0..e2a63264a 100644
--- a/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ConfigManagerImpl.java
@@ -13,25 +13,31 @@ 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.JsonObject;
import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.JsonPrimitive;
+import me.sargunvohra.mcmods.autoconfig1u.util.Utils;
import me.shedaniel.cloth.hooks.ScreenHooks;
-import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
+import me.shedaniel.clothconfig2.api.Modifier;
+import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry;
import me.shedaniel.rei.RoughlyEnoughItemsCore;
-import me.shedaniel.rei.api.*;
+import me.shedaniel.rei.api.ConfigManager;
+import me.shedaniel.rei.api.ConfigObject;
+import me.shedaniel.rei.api.EntryStack;
+import me.shedaniel.rei.api.RecipeHelper;
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 net.minecraft.util.math.MathHelper;
import java.util.ArrayList;
import java.util.Collections;
@@ -43,45 +49,72 @@ import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.setUnsafely;
@Deprecated
@Internal
public class ConfigManagerImpl implements ConfigManager {
-
+
private boolean craftableOnly;
private List<EntryStack> favorites = new ArrayList<>();
-
+
public ConfigManagerImpl() {
this.craftableOnly = false;
- 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());
- });
+ AutoConfig.register(ConfigObjectImpl.class, (definition, configClass) -> new JanksonConfigSerializer<>(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())).registerTypeAdapter(ModifierKeyCode.class, o -> {
+ InputUtil.KeyCode keyCode = InputUtil.fromName(((JsonPrimitive) o.get("keyCode")).asString());
+ Modifier modifier = Modifier.of(((Number) ((JsonPrimitive) o.get("modifier")).getValue()).shortValue());
+ return ModifierKeyCode.of(keyCode, modifier);
+ }).registerSerializer(ModifierKeyCode.class, (keyCode, marshaller) -> {
+ JsonObject object = new JsonObject();
+ object.put("keyCode", new JsonPrimitive(keyCode.getKeyCode().getName()));
+ object.put("modifier", new JsonPrimitive(keyCode.getModifier().getValue()));
+ return object;
+ }).build()));
GuiRegistry guiRegistry = AutoConfig.getGuiRegistry(ConfigObjectImpl.class);
//noinspection rawtypes
guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> Collections.singletonList(ConfigEntryBuilder.create().startEnumSelector(i13n, (Class) field.getType(), getUnsafely(field, config, null)).setDefaultValue(() -> getUnsafely(field, defaults)).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, InputUtil.UNKNOWN_KEYCODE)).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);
+ // 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, InputUtil.UNKNOWN_KEYCODE)).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);
+ // guiRegistry.registerPredicateProvider((i13n, field, config, defaults, guiProvider) -> {
+ // KeyCodeEntry entry = ConfigEntryBuilder.create().startKeyCodeField(i13n, getUnsafely(field, config, InputUtil.UNKNOWN_KEYCODE)).setDefaultValue(() -> getUnsafely(field, defaults)).setSaveConsumer(newValue -> setUnsafely(field, config, newValue)).build();
+ // entry.setAllowMouse(false);
+ // return Collections.singletonList(entry);
+ // }, field -> field.getType() == InputUtil.KeyCode.class);
guiRegistry.registerPredicateProvider((i13n, field, config, defaults, guiProvider) -> {
- KeyCodeEntry entry = ConfigEntryBuilder.create().startKeyCodeField(i13n, getUnsafely(field, config, InputUtil.UNKNOWN_KEYCODE)).setDefaultValue(() -> getUnsafely(field, defaults)).setSaveConsumer(newValue -> setUnsafely(field, config, newValue)).build();
+ KeyCodeEntry entry = ConfigEntryBuilder.create().startModifierKeyCodeField(i13n, getUnsafely(field, config, ModifierKeyCode.unknown())).setModifierDefaultValue(() -> getUnsafely(field, defaults)).setModifierSaveConsumer(newValue -> setUnsafely(field, config, newValue)).build();
entry.setAllowMouse(false);
return Collections.singletonList(entry);
- }, field -> field.getType() == InputUtil.KeyCode.class);
+ }, field -> field.getType() == ModifierKeyCode.class);
+ guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> {
+ KeyCodeEntry entry = ConfigEntryBuilder.create().startModifierKeyCodeField(i13n, getUnsafely(field, config, ModifierKeyCode.unknown())).setModifierDefaultValue(() -> getUnsafely(field, defaults)).setModifierSaveConsumer(newValue -> setUnsafely(field, config, newValue)).build();
+ entry.setAllowMouse(false);
+ return Collections.singletonList(entry);
+ }, field -> field.getType() == ModifierKeyCode.class, ConfigObject.UsePercentage.class);
+ guiRegistry.registerAnnotationProvider((i13n, field, config, defaults, guiProvider) -> {
+ ConfigObject.UsePercentage bounds = field.getAnnotation(ConfigObject.UsePercentage.class);
+ return Collections.singletonList(ConfigEntryBuilder.create().startIntSlider(i13n, MathHelper.ceil(Utils.getUnsafely(field, config, 0.0) * 100), MathHelper.ceil(bounds.min() * 100), MathHelper.ceil(bounds.max() * 100)).setDefaultValue(() -> {
+ return MathHelper.ceil((double) Utils.getUnsafely(field, defaults) * 100);
+ }).setSaveConsumer((newValue) -> {
+ Utils.setUnsafely(field, config, newValue / 100d);
+ }).setTextGetter(integer -> String.format("Size: %d%%", integer)).build());
+ }, (field) -> {
+ return field.getType() == Double.TYPE || field.getType() == Double.class;
+ }, ConfigObject.UsePercentage.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();
@@ -92,7 +125,7 @@ public class ConfigManagerImpl implements ConfigManager {
}
saveConfig();
}
-
+
@Override
public void saveConfig() {
Gson gson = new GsonBuilder().create();
@@ -105,27 +138,27 @@ public class ConfigManagerImpl implements ConfigManager {
}
((me.sargunvohra.mcmods.autoconfig1u.ConfigManager<ConfigObjectImpl>) AutoConfig.getConfigHolder(ConfigObjectImpl.class)).save();
}
-
+
@Override
public ConfigObject getConfig() {
return AutoConfig.getConfigHolder(ConfigObjectImpl.class).getConfig();
}
-
+
@Override
public boolean isCraftableOnlyEnabled() {
return craftableOnly;
}
-
+
@Override
public void toggleCraftableOnly() {
craftableOnly = !craftableOnly;
}
-
+
@Override
public void openConfigScreen(Screen parent) {
MinecraftClient.getInstance().openScreen(getConfigScreen(parent));
}
-
+
@Override
public Screen getConfigScreen(Screen parent) {
try {
@@ -177,7 +210,7 @@ public class ConfigManagerImpl implements ConfigManager {
}
super.render(int_1, int_2, float_1);
}
-
+
@Override
protected void init() {
super.init();
@@ -185,7 +218,7 @@ public class ConfigManagerImpl implements ConfigManager {
this.minecraft.openScreen(parent);
}));
}
-
+
@Override
public boolean keyPressed(int int_1, int int_2, int int_3) {
if (int_1 == 256 && this.shouldCloseOnEsc()) {
@@ -196,5 +229,5 @@ public class ConfigManagerImpl implements ConfigManager {
}
};
}
-
+
}
diff --git a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
index 8bc0dc542..94d5259f0 100644
--- a/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
+++ b/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
@@ -9,6 +9,8 @@ import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
import me.sargunvohra.mcmods.autoconfig1u.annotation.ConfigEntry;
import me.sargunvohra.mcmods.autoconfig1u.shadowed.blue.endless.jankson.Comment;
+import me.shedaniel.clothconfig2.api.Modifier;
+import me.shedaniel.clothconfig2.api.ModifierKeyCode;
import me.shedaniel.rei.api.ConfigObject;
import me.shedaniel.rei.api.annotations.Internal;
import me.shedaniel.rei.gui.config.*;
@@ -21,302 +23,312 @@ import java.util.List;
@Internal
@Config(name = "roughlyenoughitems/config")
public class ConfigObjectImpl implements ConfigObject, ConfigData {
-
- @ConfigEntry.Category("!general")
- @ConfigEntry.Gui.TransitiveObject
- @DontApplyFieldName
- public General general = new General();
- @ConfigEntry.Category("appearance")
- @ConfigEntry.Gui.TransitiveObject
- @DontApplyFieldName
- private Appearance appearance = new Appearance();
- @ConfigEntry.Category("modules")
- @ConfigEntry.Gui.TransitiveObject
- @DontApplyFieldName
- private Modules modules = new Modules();
- @ConfigEntry.Category("technical")
- @ConfigEntry.Gui.TransitiveObject