diff options
| author | shedaniel <daniel@shedaniel.me> | 2020-01-02 14:31:16 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2020-01-02 14:31:16 +0800 |
| commit | 5e2eccadbd91171c01cdb209d1338bcfb7786b1c (patch) | |
| tree | 6c7387de5baea8b335e8abe58651018f77ad2d41 /src/main/java/me/shedaniel/rei/impl | |
| parent | e8714fe8fc1dcaec7ad299c63e2b657870c8fb40 (diff) | |
| download | RoughlyEnoughItems-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')
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 |
