package me.shedaniel.library; import me.shedaniel.listenerdefinitions.PreLoadOptions; import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import org.apache.commons.lang3.ArrayUtils; import org.dimdev.rift.listener.client.KeybindHandler; import java.util.*; /** * Created by James on 8/7/2018. */ public class KeyBindManager implements PreLoadOptions, KeybindHandler { private static boolean optionsLoaded = false; private static List bindingsToAdd = new ArrayList<>(); private static Map bindingFunctions = new HashMap<>(); public static KeyBinding createKeybinding(String bindingName, int key, String categoryName, Sink function) { KeyBinding newBinding; newBinding = new KeyBinding(bindingName, key, categoryName); if (optionsLoaded) { ArrayUtils.add(Minecraft.getInstance().gameSettings.keyBindings, newBinding); } else { bindingsToAdd.add(newBinding); } bindingFunctions.put(newBinding, function); addCategoryIfMissing(categoryName); return newBinding; } private static void addCategoryIfMissing(String categoryName) { /*if (!KeyBinding.CATEGORY_ORDER.containsKey(categoryName)){ KeyBinding.CATEGORY_ORDER.put(categoryName,KeyBinding.CATEGORY_ORDER.size()+1); }*/ } @Override public List loadOptions() { optionsLoaded = true; return bindingsToAdd; } @Override public void processKeybinds() { bindingFunctions.keySet().stream().filter(KeyBinding::isPressed).forEach(f -> bindingFunctions.get(f).Sink()); } public static boolean processGuiKeybinds(int typedChar) { Optional binding = bindingFunctions.keySet().stream().filter(f -> f.getDefault().getKeyCode() == typedChar).findFirst(); if (binding.isPresent()) { bindingFunctions.get(binding.get()).Sink(); return true; } return false; } }