Add other mods
This commit is contained in:
92
ItemIO BetterMergeStack/CSharp/Client/Bmsmod.cs
Normal file
92
ItemIO BetterMergeStack/CSharp/Client/Bmsmod.cs
Normal file
@@ -0,0 +1,92 @@
|
||||
using System.Reflection;
|
||||
using Barotrauma.Extensions;
|
||||
using Microsoft.Xna.Framework;
|
||||
using HarmonyLib;
|
||||
using System.Linq;
|
||||
using Barotrauma;
|
||||
using BmsUtils;
|
||||
|
||||
// debug
|
||||
// using System.Diagnostics;
|
||||
|
||||
namespace Bms_Harmony
|
||||
{
|
||||
partial class BmsHarmony : ACsMod
|
||||
{
|
||||
const string harmony_id = "com.Bms.Harmony";
|
||||
private readonly Harmony harmony;
|
||||
|
||||
public override void Stop()
|
||||
{
|
||||
harmony.UnpatchAll(harmony_id);
|
||||
}
|
||||
|
||||
public BmsHarmony()
|
||||
{
|
||||
harmony = new Harmony(harmony_id);
|
||||
harmony.PatchAll(Assembly.GetExecutingAssembly());
|
||||
Barotrauma.DebugConsole.AddWarning("Loaded BmsHarmony");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(Barotrauma.Items.Components.ItemContainer))]
|
||||
class Patch_MergeStacks
|
||||
{
|
||||
static MethodBase TargetMethod()
|
||||
{
|
||||
Barotrauma.DebugConsole.AddWarning("Patch_MergeStacks TargetMethod");
|
||||
return AccessTools.Method(typeof(Barotrauma.Items.Components.ItemContainer), "MergeStacks");
|
||||
}
|
||||
static bool Prefix(Barotrauma.Items.Components.ItemContainer __instance)
|
||||
{
|
||||
for (int i = 0; i < __instance.Inventory.Capacity - 1; i++)
|
||||
{
|
||||
var items = __instance.Inventory.GetItemsAt(i).ToList();
|
||||
if (items.None()) { continue; }
|
||||
if (items.First().Prefab.Identifier.ToString() == "StackBox" &&
|
||||
items.First().OwnInventories.First().AllItemsMod.Any())
|
||||
{
|
||||
for (int j = 0; j < __instance.Inventory.Capacity - 1; j++)
|
||||
{
|
||||
var items2 = __instance.Inventory.GetItemsAt(j).ToList();
|
||||
if (items2.None()) { continue; }
|
||||
if (items2.First().Prefab.Identifier.ToString() != "StackBox")
|
||||
{
|
||||
items2.ForEach(it => __instance.Inventory.TryPutItem(it, i, allowSwapping: false, allowCombine: true, user: null, createNetworkEvent: false));
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(Barotrauma.Items.Components.ItemContainer))]
|
||||
class Patch_CreateGUI
|
||||
{
|
||||
static MethodBase TargetMethod()
|
||||
{
|
||||
Barotrauma.DebugConsole.AddWarning("Patch_CreateGUI TargetMethod");
|
||||
return AccessTools.Method(typeof(Barotrauma.Items.Components.ItemContainer), "CreateGUI");
|
||||
}
|
||||
|
||||
static void Postfix(Barotrauma.Items.Components.ItemContainer __instance)
|
||||
{
|
||||
if (__instance.Inventory.Capacity > 1)
|
||||
{
|
||||
var layoutGroup = __instance.GuiFrame.FindChild(c => c is Barotrauma.GUILayoutGroup, recursive: true);
|
||||
new GUIButton(new RectTransform(Vector2.One, layoutGroup.RectTransform, scaleBasis: ScaleBasis.Smallest), style: "PushButton")
|
||||
{
|
||||
ToolTip = TextManager.Get("bms.pushicon"),
|
||||
OnClicked = (btn, userdata) =>
|
||||
{
|
||||
Util.PushItems(true);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user