93 lines
3.1 KiB
Java
93 lines
3.1 KiB
Java
|
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<PModuleConfigEntry> getConfigEntries() {
|
||
|
List<PModuleConfigEntry> entries = new ArrayList<>();
|
||
|
|
||
|
Map<ConfigurationOption<KeybindValue>, ModuleBase> mapped = new HashMap<>();
|
||
|
if (ConfigManager.getConfig().isPresent()) {
|
||
|
Map<KeyBinding, ModuleBase> 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<ModuleBase> 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());
|
||
|
}
|
||
|
}
|
||
|
}
|