package pm.j4.petroleum.modules.bindings; import java.util.*; import net.minecraft.client.MinecraftClient; import net.minecraft.client.options.KeyBinding; import net.minecraft.client.util.InputUtil; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.TranslatableText; import org.lwjgl.glfw.GLFW; import pm.j4.petroleum.PetroleumMod; import pm.j4.petroleum.gui.PModuleConfigEntry; import pm.j4.petroleum.modules.base.ConfigurationOption; import pm.j4.petroleum.modules.base.ModuleBase; import pm.j4.petroleum.modules.base.option.KeybindValue; import pm.j4.petroleum.util.config.ConfigManager; import pm.j4.petroleum.util.config.GlobalConfig; /** * The type Binding manager. */ public class BindingManager extends ModuleBase { /** * Instantiates a new Module base. * Parameters should be constant across restarts. */ public BindingManager() { super("petroleum.bindings", false, true, true); } @Override public void init() { registerBindings(); super.init(); } @Override public List getConfigEntries() { List entries = new ArrayList<>(); Map, ModuleBase> mapped = new HashMap<>(); if (ConfigManager.getConfig().isPresent()) { Map binds = ConfigManager.getConfig().get().globalConfig.bindings; System.out.println("Number of bindings: " + binds.size()); binds.forEach((key, func) -> mapped.put(new ConfigurationOption<>(new KeybindValue(key)), func)); } mapped.forEach((bind, module) -> { PModuleConfigEntry entry = new PModuleConfigEntry(bind, new TranslatableText(module.getModuleName())) { //TODO keybinding. most likely involves mixin to take direct key input // look into how keybinding in regular options screen works @Override public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { if (this.displayText != null) { MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, displayText, x, y, 0xAAAAAA); } if (this.option != null) { int fontHeight = MinecraftClient.getInstance().textRenderer.fontHeight; MinecraftClient.getInstance().textRenderer.drawWithShadow(matrices, "Key Value: " + this.option.toStringValue(), x, y + fontHeight + 4, 0xFFFFFF); } } }; entries.add(entry); }); return entries; } /** * Register bindings. */ private void registerBindings() { if (!ConfigManager.getConfig().isPresent()) { return; } GlobalConfig c = ConfigManager.getConfig().get().globalConfig; Optional mod = PetroleumMod.getMod("petroleum.modmenu"); if (mod.isPresent() && !c.isBound(mod.get())) { //TODO // the only explicit keybinding (for now.) // once the binding manager has been completed, // this should be migrated there, as a default binding KeyBinding binding = new KeyBinding( "key.petroleum.togglemodmenu", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_CONTROL, "category.petroleum" ); ConfigManager.getConfig().get().globalConfig.setBinding(binding, mod.get()); } } }