package pm.j4.petroleum.util.config; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import net.minecraft.client.options.KeyBinding; import net.minecraft.client.util.InputUtil; import pm.j4.petroleum.PetroleumMod; import pm.j4.petroleum.modules.base.ConfigurationOption; import pm.j4.petroleum.modules.base.ModuleBase; import pm.j4.petroleum.modules.base.option.OptionTypeMatcher; import pm.j4.petroleum.modules.bindings.BindingInfo; /** * The type Global config. */ public class GlobalConfig extends Config { /** * The Bindings. */ public final Map bindings = new HashMap<>(); /** * Is bound boolean. * * @param func the func * @return the boolean */ public boolean isBound(ModuleBase func) { AtomicBoolean found = new AtomicBoolean(false); bindings.forEach((key, binding) -> { if (binding.equals(func)) { found.set(true); } }); return found.get(); } /** * Sets binding. * * @param bind the bind * @param func the func */ public void setBinding(KeyBinding bind, ModuleBase func) { if (bindings.containsValue(func)) { bindings.forEach((key, binding) -> { if (binding.equals(func)) { PetroleumMod.removeBind(key); bindings.remove(key); } }); } if (PetroleumMod.isActive(func.getModuleName())) { PetroleumMod.addBind(bind); bindings.put(bind, func); } } /** * Convert binding. * * @param info the info */ private void convertBinding(BindingInfo info) { Optional match = PetroleumMod.getMod(info.attachedModuleName); match.ifPresent(moduleBase -> setBinding(new KeyBinding( info.translationKey, info.type, info.key, info.category ), moduleBase)); } /** * Extract binding binding info. * * @param b the b * @param f the f * @return the binding info */ private BindingInfo extractBinding(KeyBinding b, ModuleBase f) { BindingInfo res = new BindingInfo(); res.attachedModuleName = f.getModuleName(); res.translationKey = b.getTranslationKey(); InputUtil.Key k = b.getDefaultKey(); res.type = k.getCategory(); res.key = k.getCode(); res.category = b.getCategory(); return res; } /** * Serialize bindings list. * * @return the list */ public List serializeBindings() { List b = new ArrayList<>(); bindings.forEach((k, f) -> b.add(extractBinding(k, f))); return b; } /** * Deserialize bindings. * * @param info the info */ public void deserializeBindings(List info) { info.forEach(this::convertBinding); } /** * Serialize module configuration list. * * @param module the module * @return the list */ public List serializeModuleConfiguration(ModuleBase module) { List opts = new ArrayList<>(); Map configuration = module.getModuleConfiguration(); configuration.forEach((key, value) -> { opts.add(new OptionSerializiable(value.getValueType(), value.toStringValue(), key)); }); return opts; } /** * Deserialize module configuration. * * @param opts the opts * @param module the module */ public void deserializeModuleConfiguration(List opts, ModuleBase module) { opts.forEach(option -> { module.setConfigOption(option.key, new ConfigurationOption<>(OptionTypeMatcher.match(option.type, option.value))); }); } }