public static void UpdateCommandState_Prefix(PlayerController __instance) { if (__instance.cmd.type != ECommand.None && __instance.cmd.type != ECommand.Follow && (__instance.cmd.mode != lastCmdMode || __instance.cmd.type != lastCmdType)) { ResetMultiBuild(); if (__instance.cmd.type != ECommand.Build || __instance.cmd.mode != 0) { BlueprintCreator.EndBpMode(); } // the preivous command might force us to stau in BuildMode (Even though we were leaving) if (__instance.cmd.type == ECommand.Build && lastCmdMode == 1 && __instance.cmd.mode != 1) { BlueprintManager.Reset(); } if (__instance.cmd.type != ECommand.Build) { BlueprintManager.Reset(); } lastCmdMode = __instance.cmd.mode; lastCmdType = __instance.cmd.type; } }
internal void Update() { if (!isValidInstallation) { return; } BuildLogic.OnUpdate(); BlueprintCreator.OnUpdate(); }
internal void OnDestroy() { // For ScriptEngine hot-reloading BlueprintCreator.EndBpMode(true); BlueprintManager.Reset(); foreach (var tooltip in tooltips.Values) { allTips.Remove(tooltip); } harmony.UnpatchSelf(); }
internal void Awake() { harmony = new Harmony("com.brokenmass.plugin.DSP.MultiBuild" + CHANNEL); itemSpecificSpacing = Config.Bind <bool>("General", "itemSpecificSpacing", true, "If this option is set to true, the mod will remember the last spacing used for a specific building. Otherwise the spacing will be the same for all entities."); spacingStore[0] = 0; //StartCoroutine(CheckForUpdates()); try { foreach (var pluginInfo in BepInEx.Bootstrap.Chainloader.PluginInfos) { if (BLACKLISTED_MODS.Contains(pluginInfo.Value.Metadata.GUID)) { incompatiblePlugins.Add(" - " + pluginInfo.Value.Metadata.Name); } } if (incompatiblePlugins.Count > 0) { isValidInstallation = false; harmony.PatchAll(typeof(IncompatibilityNotice)); } if (isValidInstallation) { harmony.PatchAll(typeof(MultiBuild)); harmony.PatchAll(typeof(BlueprintManager)); harmony.PatchAll(typeof(BuildLogic)); harmony.PatchAll(typeof(BlueprintCreator)); harmony.PatchAll(typeof(InserterPoses)); UIBlueprintGroup.onCreate = () => BlueprintCreator.StartBpMode(); UIBlueprintGroup.onRestore = () => { if (BlueprintCreator.bpMode) { BlueprintCreator.EndBpMode(true); } BlueprintManager.Restore(); }; UIBlueprintGroup.onImport = () => { if (BlueprintCreator.bpMode) { BlueprintCreator.EndBpMode(true); } HashSet <int> incompatibleIds; var data = BlueprintData.Import(GUIUtility.systemCopyBuffer, out incompatibleIds); if (data != null) { BlueprintManager.Restore(data); UIRealtimeTip.Popup("Blueprint successfully imported from your clipboard", false); } else { string message = "Error while importing data from your clipboard"; if (incompatibleIds.Count > 0) { message += $" - Found {incompatibleIds.Count} incompatible entities.\nIds: [{incompatibleIds.Join(null, ", ")}]"; } UIRealtimeTip.Popup(message, true); } }; UIBlueprintGroup.onExport = () => { if (BlueprintCreator.bpMode) { BlueprintCreator.EndBpMode(); } if (BlueprintManager.hasData) { GUIUtility.systemCopyBuffer = BlueprintManager.data.Export(); UIRealtimeTip.Popup("Blueprint successfully exported to your clipboard", false); } else { UIRealtimeTip.Popup("No blueprint data to export", true); } }; } } catch (Exception e) { isValidInstallation = false; Console.WriteLine(e.ToString()); } }