Advertisement
Leo40Bin

i'm so sorry

Jun 21st, 2020
1,771
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.88 KB | None | 0 0
  1. package adudecalledleo.keystrokeview.config;
  2.  
  3. import me.sargunvohra.mcmods.autoconfig1u.gui.registry.GuiRegistry;
  4. import me.sargunvohra.mcmods.autoconfig1u.util.Utils;
  5. import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
  6. import me.shedaniel.clothconfig2.gui.entries.KeyCodeEntry;
  7. import me.shedaniel.clothconfig2.gui.entries.MultiElementListEntry;
  8. import me.shedaniel.clothconfig2.gui.entries.NestedListListEntry;
  9. import net.minecraft.client.util.InputUtil;
  10.  
  11. import java.lang.reflect.Field;
  12. import java.lang.reflect.ParameterizedType;
  13. import java.lang.reflect.Type;
  14. import java.util.Collections;
  15. import java.util.List;
  16. import java.util.Objects;
  17.  
  18. import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.getUnsafely;
  19. import static me.sargunvohra.mcmods.autoconfig1u.util.Utils.setUnsafely;
  20.  
  21. public class ModConfigGuiProviders {
  22.     private static final ConfigEntryBuilder ENTRY_BUILDER = ConfigEntryBuilder.create();
  23.  
  24.     public static void register(GuiRegistry guiRegistry) {
  25.         guiRegistry.registerTypeProvider((i13n, field, config, defaults, registry) ->
  26.             Collections.singletonList(ENTRY_BUILDER.startKeyCodeField(i13n, getUnsafely(field, config))
  27.                      .setDefaultValue(Utils.<InputUtil.KeyCode>getUnsafely(field, defaults))
  28.                      .setAllowKey(true).setAllowMouse(true)
  29.                      .setSaveConsumer(keyCode -> setUnsafely(field, config, keyCode))
  30.                      .build()), InputUtil.KeyCode.class);
  31.         guiRegistry.registerPredicateProvider((i13n, field, config, defaults, registry1) -> {
  32.             List<InputUtil.KeyCode> configValue = getUnsafely(field, config);
  33.  
  34.             //Class<InputUtil.KeyCode> fieldTypeParam = InputUtil.KeyCode.class;
  35.  
  36.             String remainingI13n = i13n.substring(0, i13n.indexOf(".option") + ".option".length());
  37.             String classI13n = String.format("%s.%s", remainingI13n, InputUtil.KeyCode.class.getSimpleName());
  38.  
  39.             return Collections.singletonList(
  40.                     new NestedListListEntry<InputUtil.KeyCode, MultiElementListEntry<InputUtil.KeyCode>> (
  41.                             i13n,
  42.                             configValue,
  43.                             false,
  44.                             null,
  45.                             abstractConfigListEntries -> {
  46.                             },
  47.                             () -> getUnsafely(field, defaults),
  48.                             ENTRY_BUILDER.getResetButtonKey(),
  49.                             true,
  50.                             true,
  51.                             (elem, nestedListListEntry) -> {
  52.                                 int i = nestedListListEntry.children().size() - 2;
  53.                                 return new MultiElementListEntry<>(classI13n, elem,
  54.                                                                    Collections.singletonList(
  55.                                                                            buildKeyCodeListEntry(i13n, configValue, i)),
  56.                                                                    true);
  57.                             }
  58.                     )
  59.             );
  60.         }, ModConfigGuiProviders::isListOfKeyCodes);
  61.     }
  62.  
  63.     private static KeyCodeEntry buildKeyCodeListEntry(String i13n, List<InputUtil.KeyCode> codes, int i) {
  64.         return ENTRY_BUILDER.startKeyCodeField(i13n, codes.get(i))
  65.                 .setDefaultValue(InputUtil.UNKNOWN_KEYCODE)
  66.                 .setSaveConsumer(keyCode -> codes.set(i, keyCode)).build();
  67.     }
  68.  
  69.     public static boolean isListOfKeyCodes(Field field) {
  70.         if (List.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType) {
  71.             Type[] args = ((ParameterizedType) field.getGenericType()).getActualTypeArguments();
  72.             return args.length == 1 && Objects.equals(args[0], InputUtil.KeyCode.class);
  73.         } else {
  74.             return false;
  75.         }
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement